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


Destroy database session when user leaves website

我正在使用cakephp 2,最近将我的会话处理程序更改为数据库。一切似乎都很好,除了当用户离开网站而没有注销会话时,会话保持活跃。

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

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

我如何配置cakephp数据库会话销毁会话时,用户离开网站没有注销?

TIA !

你不能。PHP按需运行,不可能知道用户何时停止浏览站点。你基本上有两个选项:

    写一个脚本来检查你的会话存储,找到在X秒内没有被访问的会话,并清除它们。使用cron作业调用该脚本。
  1. 用户返回时检查会话,清除陈旧数据。您仍然需要不时地进行一些清理,以摆脱来自永远不会返回的用户的会话数据。

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

会话将在服务器上存储一段时间,在一段时间不活动后,会话将在服务器上自动销毁。

查看CakePHP cookbook中的Sessions信息获取更多详细信息

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

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

因此ajaxFunctionToDeleteSession将通过Ajax调用一个url,该url将删除会话。

我看到的一些问题:

  1. 当有人关闭您网站的打开页面时调用。这意味着如果有人打开了您网站的多个窗口,关闭了一个窗口,他们的整个会话,包括其他打开的选项卡将被关闭
  2. 可能有人去你的网站,做了一些意外关闭打开的窗口,重新打开网站的情况下,事情会看起来不同,因为会话消失了。

但是如果你必须在用户离开网站时删除会话,这可能是一个开始解决问题的方法。