如何检测会话何时即将结束.PHP



我不知道这是否可能。我要找的是启动以结束会话的事件(如果有的话)。我想以某种方式抓住它,在会议结束前执行我自己的行动。原因是我需要一个会话变量集,一旦会话到期,我就会丢失它。

如果可能的话,我觉得这可能是实现我目标的一种糟糕方式。现在是星期五晚上7点,还在办公室。想象一下我试图找到解决方案时的兴奋。

谢谢,伙计们。

例如,如果您制作自己的会话保存处理程序来使用数据库,则可以有一个垃圾回收回调,用于在删除数据之前获取适当的数据。

请参阅session_set_save_handler,特别是gc回调。

如果您有数据库访问权限,您可以将会话信息存储在会话表中,并从该特定用户注册的最后一个会话中检索该变量。

据我所知,没有可靠的方法可以在会话终止前触发一个保证有效的事件。重组数据处理方式最符合你的利益,而不是想出一个脆弱的黑客。

您可以将数据保存在cookie中并控制到期日期:

setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */

http://php.net/manual/en/function.setcookie.php

这样,您就不需要更改常规会话功能并允许它们正确过期。

您可以使用Javascript来实现这一点。让服务器提供一个JS函数,该函数将一直休眠到会话即将到期。

然而,这并不是万无一失的:当用户离开你的页面,强硬的cookie时,他们就不再运行你的JS了。当然,你也不能联系他们,告诉他们当会话到期时你会说什么。。。

你也可以在真正删除数据之前让你的会话"过期",并有一个自定义的处理程序来提醒用户并给他们一个宽限期。第二次destroy处理程序触发时,实际删除数据。

从技术上讲,无法判断PHP存储的会话(服务器端cookie中的会话)何时会被终止。在PHP设置中,您可以指定cookie必须存活多长时间,但它可以持续更长的时间。

如果你需要准确地跟踪它的持续时间,你应该手动构建一个会话管理系统,而不是使用PHP。

最新更新