PHP获得活动会话

时间:2015-09-12 19:48:47

标签: php

我正在尝试回显过去15分钟内处于活动状态的每个活动会话,我使用以下代码检查他们上次看到的时间。

$_SESSION['last_seen'] = date("Y-m-d H:i:s");

但是在执行下面的代码时我收到了这些错误,这段代码就是上面的代码。

  

注意:未定义的索引:last_seen in   第249行的C:\ xampp \ htdocs \ hk \ templates \ default \ index.php警告:   非法字符串偏移' last_seen'在   第249行的C:\ xampp \ htdocs \ hk \ templates \ default \ index.php

<?php
foreach($_SESSION as $s){
    if ($s['last_seen'] >= date("Y-m-d H:i:s", strtotime("-900 seconds")))
    {
        echo $s['username'];
    }
}
?>

4 个答案:

答案 0 :(得分:2)

长话短说:

1)首先你需要每次都回忆起session_start()(如果还没有)。

2)您无法使用PHP的本机会话处理程序从其他会话中读取。您需要实现自己的会话处理程序。

我猜你刚开始使用PHP。 所以这里有一些关于Web,PHP,会话和cookie需要了解的基本解释:

Cookie:Cookie是小信息,在加载页面时会发送到客户端的浏览器。如果浏览器接受cookie(并非总是如此),他会在每次请求时发送cookie信息。

所以......做类似

的事情
<?php

setcookie('my_cookie', 'Hello World!', time() + 60 * 60);

如果客户端正在请求该页面并执行上述代码,则会要求客户端浏览器存储来自your_domain.com的cookie,其名称为“my_cookie”,其中包含“Hello World!”

假设浏览器接受了该cookie,他将在每次加载your_domain.com的页面上发送它 - 只要cookie没有过期。 这允许您在客户端存储小的文本信息,并且您将能够使用$ _COOKIE ['my_cookie']检索和阅读以后的请求。

这与会话有什么关系?没有cookie我们将无法跟踪客户端。 PHP应用程序在请求之间丢失会话信息。 如果客户端在页面上发现错误,首次调用session_start(),PHP将创建一个具有唯一ID的会话Cookie,并在文件系统空间的某处分配数据,存储在$ _SESSION中。这称为“会话存储”。所以你可以开始像$_SESSION['last_seen'] = date("Y-m-d H:i:s");那样将数据写入$ _SESSION。浏览器将在接下来的几个请求中每次向您的服务器发送该cookie。回想一下session_start(),PHP现在知道已经设置了会话cookie并读取了该ID。如果ID与先前生成的会话存储匹配,则将填充$ _SESSION var并且您可以读取$ _SESSION ['last_seen']的值 您认为使用$ _SESSION可以访问任何用户的所有会话信息,但这是错误的。会话存储将只为您提供该客户端的会话ID特定数据。 正如我之前提到的,您无法使用PHP的本机会话处理程序访问任何其他会话数据,但是您可以实现自己的会话处理程序。

大多数开始编写自己的会话处理程序的人倾向于使用MySQL数据库作为会话存储。我更喜欢使用Redis。

这可能对您有所帮助: 基本PHP会话教程:http://www.phpro.org/tutorials/Introduction-To-PHP-Sessions.html

编写自己的会话处理程序并使用MySQL:http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/

答案 1 :(得分:1)

我认为你不理解$_SESSION全局数组。它仅包含当前用户会话的数据(不适用于您站点的所有用户)。您应该将这些数据保存在memcached或数据库中。

答案 2 :(得分:-1)

我建议您实际尝试echo "<pre>"; print_r($_SESSION); echo "</pre>"进行故障排除 - 这将告诉您会话数组的结构。

PS:我相信你已经使用命令session_start()启动了会话?

答案 3 :(得分:-1)

您可以使用strtotime来比较两个日期

if (strtotime($s['last_seen']) >= strtotime('+10 minutes')))
    {
        echo $s['username'];
    }