0

我正在使用 cakephp 2,最近将我的会话处理程序更改为数据库。一切似乎都工作正常,除非用户在未注销的情况下离开网站,会话保持活动状态。

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

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

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

蒂亚!

4

3 回答 3

1

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

  1. 编写一个脚本来检查您的会话存储,以查找在 X 秒内未访问的会话,并将其清除。使用 cron 作业调用此脚本。
  2. 当用户回来时检查会话,并清除所有过时的数据。您仍然需要不时进行一些清理,以清除来自永远不会回来的用户的会话数据。
于 2013-04-08T17:54:03.197 回答
1

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

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

查看CakePHP 食谱中的会话信息以获取更多详细信息

于 2013-04-08T17:54:11.390 回答
0

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

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

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

我看到的一些问题:

  1. 每当有人关闭您网站的打开页面时调用。这意味着如果有人打开您网站的多个窗口并关闭一个窗口,他们的整个会话(包括其他打开的选项卡)都会关闭
  2. 在某些情况下,有人访问您的站点,不小心关闭了打开的窗口,重新打开了站点,并且由于会话消失了,事情看起来会有所不同。

但是,如果您绝对必须在有人离开站点时删除会话,这可能会为您提供解决问题的方法。

于 2013-04-09T06:46:46.910 回答