用户离开网站时销毁数据库会话

时间:2013-04-08 17:49:46

标签: php session cakephp cakephp-2.0

我正在使用cakephp 2,最近将会话处理程序更改为数据库。 一切似乎都运行正常,除非用户离开网站而没有注销会话保持活动状态。

在我的core.php文件中,我按如下方式配置了数据库会话处理程序:

Configure::write('Session', array(
    'defaults' => 'database'
));

如何配置cakephp数据库会话以在用户离开网站时销毁会话而不注销?

TIA!

3 个答案:

答案 0 :(得分:1)

你做不到。 PHP按需运行,无法知道用户何时停止浏览该站点。你基本上有两个选择:

  1. 编写脚本以检查会话存储,以查找在X秒内未访问的会话,并清除它们。使用cron作业调用此脚本。
  2. 用户回来时检查会话,并清除任何陈旧数据。您仍然需要不时进行一些清理工作,以清除永远不会
  3. 回来的用户的会话数据。

答案 1 :(得分:1)

会话存储在服务器上,因此如果浏览器关闭或用户转到其他页面,则没有义务向服务器通知此操作。

会话在服务器中存储了一段时间,经过一段时间不活动后,会自动将其销毁。

检查CakePHP cookbook中的会话信息以获取更多详细信息

答案 2 :(得分:0)

有一种可能的解决方案在某些情况下有效,但可能不是一个很好的解决方案:

<body onUnload="ajaxFunctionToDeleteSession();">
 some random stuff goes here
</body>

所以ajaxFunctionToDeleteSession将通过Ajax调用一个会删除会话的URL。

我看到了一些问题:

  1. 当有人关闭您网站的打开页面时,可以随时调用。这意味着如果有人打开您网站的多个窗口关闭一个,他们的整个会话,包括其他打开的标签页已关闭
  2. 有些情况下,某人会访问您的网站,意外关闭打开的窗口,重新打开网站,因为会话消失,所以情况会有所不同。
  3. 但如果你绝对必须在有人离开网站时删除会话,这可能会让你开始解决问题。