2012-05-11 26 views
1

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

目前我设置会话是这样的:

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

一种解决方案是除了记录用户上次访问任何网站资源的在线/离线标志之外,还在数据库中存储时间戳。那么你可能会认为他们在15分钟后离线或其他常数值。

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

如果您在那个页面上搜索class SessionDB或去here看起来有人已经在自定义类中实现了这个版本!

+0

谢谢,我将通读这一点。 – user1199434

-1

你可以试试这个:

foreach ($_SESSION as $sessionKey => $sessionValue) 
{ 
    if($sessionKey == 'username') && ($sessionValue == 'User 1') 
    { 
    //do something 
    } 
} 
+0

嗯,这可悲的没有工作..谢谢反正,虽然:) – user1199434

+0

OP的问题是写“做某事”的一部分。 Jon再次读到这个问题。在该代码中甚至没有foreach语句的用法,只需检查'username'键是否已设置就可以了,并检查它的值。 –

+0

对不起 - 关于这个问题的一部分:“我们如何获得所有已设置的会话变量的数组?” –

0

你可以使用一个简单的更新查询

比如你有一个表的用户和你有一列名为状态(在线/离线)

您的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'") 
} 

然后注销做了SIM卡ilar脚本只是将在线值更改为离线