1

我目前正在尝试使用 php 会话变量在我的网页上显示所有在线用户。为此,每当用户登录或注销时,数据库中的列都会设置为“在线”或“离线”。但这并不完全有效,因为当用户关闭浏览器时数据库不会更新(因此破坏了会话)。那么是否有另一种方法来检查是否设置了某个 sessionid?

目前我正在设置这样的会话:

session_start();

$_SESSION['username']="Example Username";

要从当前用户页面检查是否有会话变量集,我们可以简单地使用:

if(isset($_SESSION['username']))
{
//username is set
}

但是如果我们需要检查一个特定的用户是否在线,我们如何获得一个包含所有已设置会话变量的数组?例如

//Get all $_SESSION['username'] vars

//loop through array and check for specific $_SESSION

for($i=0; ... )
{
  if( $_SESSION['username'][$i] == "User 1" )
  {
  //do something
  }
}

从到目前为止我读过的所有内容来看,似乎没有办法在您的页面上获取所有会话的数组。那么有没有更好的方法,例如 Facebook、Twitter 等如何处理这玩意儿?谢谢你的帮助!

4

3 回答 3

4

一种解决方案是在您的数据库中存储一个时间戳,以及记录用户最后一次访问您的任何网站资源的在线/离线标志。然后,您可能会在 15 分钟或其他一些恒定值后将它们视为离线。

另一个解决方案是在这里使用回调http://php.net/manual/en/function.session-set-save-handler.php我认为您可以在其中处理 gc 回调并在数据库中设置离线标志.

如果您在该页面上搜索class SessionDB或转到此处,看起来有人已经在自定义类中实现了某个版本!

于 2012-05-11T22:54:02.283 回答
0

您可以使用简单的更新查询

例如,您有一个表 users 并且您有一个名为 status(online/offline) 的列

在您的 login.php 上使用

<?php
//your user verification code
if(variable that holds your sql query){
$user_status=('UPDATE user SET status= online WHERE email="'your user email selector'")
}

然后在注销时执行类似的脚本,只需将在线值更改为离线

于 2013-12-21T12:44:33.130 回答
-1

你可以试试这个:

foreach ($_SESSION as $sessionKey => $sessionValue)
{
  if( $sessionKey == 'username' ) && ( $sessionValue == 'User 1' )
  {
  //do something
  }
}
于 2012-05-11T22:54:21.713 回答