如何打印当前设置的所有会话变量?

71

不需要逐个调用每个会话变量的名称,有没有一种方法可以显示当前设置的所有会话变量的内容?

7个回答

157
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';

或者你可以使用print_r,如果你不关心类型的话。如果你使用print_r,你可以将第二个参数设置为TRUE,这样它就会返回而不是输出,对于...

echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';

3
楼主在询问所有会议的情况。 - apaderno
3
标题说“如何打印PHP中当前设置的所有会话?”; 如果所有发帖者想要的只是打印当前会话,则问题写错了。 - apaderno
根据文档,@fibriZo,它不会。 - alex
抱歉@alex,你是对的;它与XDebug有关,正如这里指出的那样:https://dev59.com/93DXa4cB1Zd3GeqP9jX8 - fibriZo raZiel
1
@kiamlaluno 我已经编辑了问题,使其更加明确,以便准确反映他真正想知道的内容。 - PhoneixS
显示剩余4条评论

23
<?php
    session_start();
    echo "<h3> PHP List All Session Variables</h3>";
    foreach ($_SESSION as $key=>$val)
    echo $key." ".$val."<br/>";
?>

这是一个更好的解决方案,它只打印内容而不是额外的数组垃圾。 - Ryan Walker
对我没用。存储在会话中的对象(例如日期)不会回显。 - CrazyTim

5

这并不是一个简单的方法。

假设您说的“活动”的意思是“还没有过期”且没有被明确销毁,并且您正在使用默认的会话处理程序。

  • 首先,最大生存时间被定义为 php.ini 配置,以上次在会话中的活动为依据。因此,“到期”机制必须读取会话内容才能确定应用程序定义的到期时间。
  • 其次,您必须手动读取会话目录并阅读文件,而我甚至不知道其格式。

如果您真的需要这个功能,您必须实现某种自定义会话处理程序。请参见session_set_save_handler

还要考虑用户仅关闭浏览器或离开站点而没有明确注销的情况。根据您认为将会话视为“不活跃”的闲置时间长短,可能会得到很多误报。


文件似乎是以这种格式 last_active|i:1280043940; 存在的,因此通过一些分割,我认为我们可以生成一个列表(虽然不准确地活动会话)。 - alex

4

这对我很有帮助:

<?php echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>'; ?>

感谢分享代码...

(注:该段文字已经是中文,无需翻译)
Array
(    
    [__ci_last_regenerate] => 1490879962

    [user_id] => 3

    [designation_name] => Admin
    [region_name] => admin
    [territory_name] => admin
    [designation_id] => 2
    [region_id] => 1
    [territory_id] => 1
    [employee_user_id] => mosin11
)

这将会很好地列出所有的 $_SESSION 变量。 - Neil_Tinkerer

2
您可以使用以下代码。
print_r($_SESSION);

3
问题要求的是所有会话,而不仅仅是当前的会话。 - mwhite

1
输出会话对象的json。我喜欢json,因为我有一个浏览器扩展程序可以很好地格式化json。
session_start();
echo json_encode($_SESSION);

0
session_start();
echo '<pre>';var_dump($_SESSION);echo '</pre>';
// or
echo '<pre>';print_r($_SESSION);echo '</pre>';

注意:session_start();必须存在只有这样才能打印出$_SESSION的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接