Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话\u设置\u保存\u处理程序关闭/gc_Php - Fatal编程技术网

Php 会话\u设置\u保存\u处理程序关闭/gc

Php 会话\u设置\u保存\u处理程序关闭/gc,php,Php,我需要在会话超时后执行操作。但是,我不知道如何在没有传入请求的情况下触发该操作。事件处理程序/侦听器/计时器非常适合,但由于PHP不支持这样的东西,所以很难实现我想要的 在进行了大量搜索之后,我遇到了session\u set\u save\u处理程序,但我仍然不能完全理解这个方法是如何工作的。如果我在close方法中编写代码,在何时执行该操作 我还需要保持当前会话解决方案的原样,我想知道与之结合使用会话\设置\保存\处理程序会产生什么后果?我当前的解决方案设置会话cookie,为会话分配名称并

我需要在会话超时后执行操作。但是,我不知道如何在没有传入请求的情况下触发该操作。事件处理程序/侦听器/计时器非常适合,但由于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代码。