我需要在会话超时后执行操作。但是我不知道如何在没有传入请求的情况下触发该操作。事件处理程序/监听器/计时器非常适合,但由于PHP不支持这样的事情,所以很难完成我想要的事情。
经过大量搜索后,我遇到了session_set_save_handler,但我还是无法完全理解这个方法是如何工作的。如果我编写的代码在执行时会触发close方法中的动作吗?
我还需要保持当前的会话解决方案,我想知道使用session_set_save_handler与其结合的后果是什么? (我当前的解决方案设置会话cookie,为会话分配名称并启动会话,当用户注销或在会话超时后完成请求(该值在配置文件中设置)会话被完全销毁)
问候!
答案 0 :(得分:0)
PHP需要以某种方式运行才能执行PHP代码。通过用户请求或cronjob。
当PHP请求完成执行或调用session_write_close()
时,会话将保存到语言环境存储
这个session_set_save_handler()
允许你编写自己的保存处理程序。
答案 1 :(得分:0)
这在php,AFAIK中有点难以做到。
但您可以尝试制作被动会话处理程序:
您可以通过比较系统的当前值和每个会话ID的时间戳来检测已失效的会话。假定在给定阈值(例如30分钟)之上不同的那些已经过世。然后,您可以为这些会话ID执行自己的保存处理程序。
如果会话结束处理程序需要立即执行,这将不起作用,因为每次请求到达时(来自任何用户)都会执行此过程,因此它将直接取决于网站的流量。
但你也可以通过每15分钟左右设置一次cron作业来解决它。根据您的保存处理程序的成本,似乎是一个可接受的周期。