2015-01-26 54 views
0

如何创建实时PHP会话控制?我的意思是,当用户登录时,我创建了一个PHP会话($_SESSION[]),并将它存储在一个表(MySQL)中,但是如何知道用户何时注销?我明显可以检测到用户何时注销并销毁会话,但如果用户从未单击,会发生什么情况注销如何在会话关闭时检测到该问题?
谢谢!PHP实时会话控制。怎么样?

+1

每次用户在您的网站上进行交互时,都可以更新您的表格的时间,并将那些没有充当注销的用户更新。 – harrrrrrry 2015-01-26 20:07:29

+1

你没有。您可以使用每隔* n *秒自动刷新一次的隐藏框架,使用“心跳”或其他方法生成图像或其他东西的ajax – 2015-01-26 20:07:59

+1

会话在定义的超时(默认为24分钟)后自动失效。会话cookie也可以配置为当浏览器窗口关闭时而不是在上一次请求之后终止。 – Dai 2015-01-26 20:08:05

回答

1

这是一个常见问题。当用户不单击注销按钮时,会话将再次可用。通常情况下,垃圾收集器会在定义的时间后清理会话。

http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL

这里是一个很好的教程如何建立一个MySQL的会话处理程序。所以让PHP管理这个部分。

重要组成部分,是在这里:

<?php 
// set our custom session functions. 
session_set_save_handler(array($this, 'open'), 
array($this, 'close'), 
array($this, 'read'), 
array($this, 'write'), 
array($this, 'destroy'), 
array($this, 'gc')); 

// This line prevents unexpected effects 
//when using objects as save handlers. 
register_shutdown_function('session_write_close'); 
?> 

您定义清理您的会话功能的最后一个阵列。

-1

我有这个问题,但我解决了通过创建另一个ID,所以我不必使用SESSION ID(我认为它不安全),所以每次用户登录我的系统时,他会得到另一个ID,我的函数检查如果用户有权检查数据库上的用户标识,该用户标识也保存在我的会话中,以检查它是否与我的数据库上的标识相同。

我认为这是另一个安全措施,以确保我只有一个用户登录实例,并且直到现在我都没有问题。

但是,如果您必须知道用户何时断开了您的系统,这将无济于事。