2010-11-19 120 views
2

在php中,我使用用户的id创建一个会话。所以我做列出用户的Php会话并远程登录该会话

$_SESSION['id'] = $id; 

对用户3说。有没有办法可以列出用户3的所有会话?也远程杀死会话(注销)。我想给用户提供类似gmail的地方,他们可以在其中查看他们账户的会话。我也希望允许他们远程登出他们的用户帐户。我的网站大部分已完成,但这是我很不确定的事情。我甚至不确定Php是否支持这一点。我想要这样做来加强安全。所以说有人去学校或某个地方忘了注销,他们可以通过他们的账户从另一台计算机上远程执行。此外,我计划在会议中存储他们的IP,也是最后一次。所以它也可以列出IP地址,最后一次。如何做到这一点有任何线索?有没有像这样的PHP会话?

回答

5

您可以设置会话处理程序,将会话数据写入数据库。然后,您可以分析该表以找到具有相同ID的其他会话。

http://php.net/manual/en/function.session-set-save-handler.php

那会话的方式。但我建议自己实现这一点,因为会话数据是序列化的,所以您必须阅读所有会话,反序列化它并搜索一个键“id”。

你可以创建一个表(可以说)session-id,user-id,ip和time。每次用户登录时,都会在该表中添加一条记录,并在每次请求时更新时间(类似于“上次看到的”)。 如果您想知道是否有其他用户使用一个ID,只需选择user-id列即可。 “合法”用户可以通过session-id进行标识。 接下来,如果你想“远程注销”一个会话,你可以添加一列“force_logout”或其他东西。现在,在下一个请求(“非法”用户的)请求下,读取该标志并终止会话。

+0

好主意。我得到你想说的话,如果用户被禁止,我会检查每个页面的负载,然后我回显出一个页面,说他们被禁止,如果他们被标记为禁止,则会死亡。所以如果会话是“非法”的,可以使用0表示主动,1表示不主动。所以如果它的0,回声他们已经注销,然后死亡。全部在全局头文件中处理。我如何处理垃圾收集。另外,如果会话超时,如果他们再次登录,是否可以获得相同的会话ID? – Keverw 2010-11-19 01:38:55

+0

我也可以检查,当我同时列出MySql结果时,该会话是否仍然活动?就像他们注销,我可以告诉MySQL。但如果他们超时?我可以检查会话是否仍然活动? – Keverw 2010-11-19 01:42:53

+0

您可以读出* gx_maxlifetime'ini设置,并将其与* time * -column中存储的值进行比较 – KingCrunch 2010-11-19 09:14:33

0

你可以保持SESSION_ID(通过SESSION_ID()函数得到它,而用户登录)在数据库和远程会话终止(通过REST例如)通过用户ID使用下面的函数:

public function drop_session($session_id) { 
     if ($session_id) { 
      session_id($session_id); 
      //session_start(); 
      session_destroy(); 
      session_commit(); 
     } 
    }