Php 会话\u设置\u保存\u处理程序关闭/gc
我需要在会话超时后执行操作。但是,我不知道如何在没有传入请求的情况下触发该操作。事件处理程序/侦听器/计时器非常适合,但由于PHP不支持这样的东西,所以很难实现我想要的 在进行了大量搜索之后,我遇到了session\u set\u save\u处理程序,但我仍然不能完全理解这个方法是如何工作的。如果我在close方法中编写代码,在何时执行该操作 我还需要保持当前会话解决方案的原样,我想知道与之结合使用会话\设置\保存\处理程序会产生什么后果?我当前的解决方案设置会话cookie,为会话分配名称并启动会话,当用户注销或在会话超时后完成请求时,该值在配置文件中设置,会话将完全销毁Php 会话\u设置\u保存\u处理程序关闭/gc,php,Php,我需要在会话超时后执行操作。但是,我不知道如何在没有传入请求的情况下触发该操作。事件处理程序/侦听器/计时器非常适合,但由于PHP不支持这样的东西,所以很难实现我想要的 在进行了大量搜索之后,我遇到了session\u set\u save\u处理程序,但我仍然不能完全理解这个方法是如何工作的。如果我在close方法中编写代码,在何时执行该操作 我还需要保持当前会话解决方案的原样,我想知道与之结合使用会话\设置\保存\处理程序会产生什么后果?我当前的解决方案设置会话cookie,为会话分配名称并
问候 PHP需要以某种方式运行,才能执行PHP代码。通过用户请求或cronjob 当PHP请求完成执行或调用Session_write_close时,会话将保存到区域设置存储中
这个session\u set\u save\u处理程序允许您编写自己的save处理程序。这在php中有点困难 但您可以尝试创建一个被动会话处理程序: 存储与时间戳关联的会话ID。 每次与特定id关联的用户发出请求时,刷新其时间戳。 您可以通过比较系统的当前会话id和每个会话id的时间戳来检测已失效的会话。那些在给定时间(比如30分钟)以上有差异的人被认为已经去世了。然后,您可以为这些会话ID执行自己的保存处理程序 如果会话结束处理程序需要立即执行,这将不起作用,因为每次从任何用户收到请求时都会执行此过程,因此它将直接取决于网站的流量
但您也可以通过每15分钟左右设置一次cron作业来解决这个问题。根据您的保存处理程序的价格,似乎是一个可接受的周期。此会话\u设置\u保存\u处理程序允许您编写自己的保存处理程序。您的意思是,就像将会话密钥存储在数据库中并在会话销毁时删除它一样,您可以通过比较系统的当前会话和每个会话id的时间戳来检测已失效的会话。那些在给定时间(比如30分钟)以上有差异的人被认为已经去世了。然后,您可以为这些会话ID执行自己的保存处理程序。但这需要提出请求,对吗?这不能自动完成。对吗?是的,唯一的方法似乎是设置cron作业或类似的东西。除了cron作业,您无法在请求之外执行任何php代码。