gpt4 book ai didi

PHP session 过期

转载 作者:可可西里 更新时间:2023-11-01 00:37:54 28 4
gpt4 key购买 nike

关于 PHP session 过期的问题。

如果该用户有一段时间不活动(出于测试目的,5 秒),我需要我的服务器丢弃 session 信息。

我看过this question尤其是 Gumbo(+28 票)的回答,我一直在想这个答案对于不活跃用户的可​​行性。在我的网站上,我已经实现了这个建议并且它工作正常,只要用户在 session 过期后至少请求一次数据。但不活跃用户的问题在于他们不请求新数据。因此永远不会调用过期代码。

我一直在查看 session.gc_maxlife 和我的 PHP.ini 中的相关参数,但我无法按照我希望的方式进行这项工作。

关于这个问题有什么建议吗?

最佳答案

session expiration logic I mentioned确实已经做了您期望的事情: session 一旦过期就不能使用。

session数据还在storage中无所谓,过期就不能用了;下次垃圾收集器运行时,它将被删除。这发生的概率为 session.gc_probability除以 session.gc_divisor在每个 session_start 调用中(另请参见 How long will my session last?)。


编辑 由于您想在过期的 session 上执行一些额外的任务,我宁愿建议使用 custom session save handler .

当使用一个类作为 session 保存处理程序时,您可以编写两个类,一个用于基本的保存处理程序,另一个带有扩展的垃圾收集器来执行额外的任务,例如:

interface SessionSaveHandler {
public function open();
public function close();
public function read($id)
public function write($id, $data);
public function destroy($id);
public function gc($callback=null);
}
class SessionSaveHandler_WithAdditionalTasks implements SessionSaveHandler {
// …
public function gc($callback=null) {
if (!is_null($callback) && (!is_array($callback) || !is_callable($callback))) return false;
while (/* … */) {
if ($callback) $callback[0]::$callback[1]($id);
// destroy expired sessions
// …
}
}
public static function doAdditionalTasksOn($id) {
// additional tasks with $id
}
}
session_set_save_handler(array('SessionSaveHandler_DB_WithAdditionalTasks', 'open'),
array('SessionSaveHandler_DB_WithAdditionalTasks', 'close'),
array('SessionSaveHandler_DB_WithAdditionalTasks', 'read'),
array('SessionSaveHandler_DB_WithAdditionalTasks', 'write'),
array('SessionSaveHandler_DB_WithAdditionalTasks', 'destroy'),
array('SessionSaveHandler_DB_WithAdditionalTasks', 'gc')
);

关于PHP session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636741/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com