session_start()是否应该通过session.gc_maxlifetime变量延长会话ID cookie的生命周期?
我的session.gc_maxlifetime是24分钟,每个会话只有24分钟,无论网站上的其他活动如何.我得到我的会话,刷新页面,并且到期时间不会改变.这导致在登录24分钟后退出,无论如何.我的配置有问题吗?
我已经注意到 PHP 中的这种行为,并尝试了 PHP 上的所有配置,但到目前为止都没有运气。
我的会话从一开始就在确切的时间死去session_start(),看看 cookie 的生命周期,它没有更新它的到期时间。
我的应用程序已经有一个重要的客户端数量,大约每秒 60 个连接,所以 GC 每 1.5 秒被命中一次(我猜)。
我的 cookie 时间不延长的解决方案是这样的(它可能看起来不优雅,但对我有用)。
function my_session_start($maxtime = 300){
// $maxtime = 300 for 5 minutes
session_start();
$_sess_name = session_name();
$_sess_id = session_id();
// Update cookie ;)
setcookie($_sess_name, $_sess_id, time() + $maxtime, "/");
}
Run Code Online (Sandbox Code Playgroud)
这是我的特殊解决方案,正如问题所说的“会话 ID cookie”。可能不是最佳选择,但确实对我有用!
我也有这个问题.我在想每个人
session_set_cookie_params($sessionTime, '/', $domain);
session_start();
Run Code Online (Sandbox Code Playgroud)
导致cookie PHPSESSID的到期时间延长.但实际上session_start(),当生成新会话ID时,cookie PHPSESSID 仅在会话中第一次设置.
我的目标是每次打开页面时都会重新生成会话到期时间.我发现会话可能会因为两个原因而过期:
session_start(),因此会话将因Cookie过期时间而过期.ini_set('session.gc_maxlifetime', $sessionTime).在这种情况下的解决方案是,您不会设置cookie的到期时间,但session.gc_maxlifetime仍设置为:
function my_session_start($maxtime = 300)
{
ini_set('session.gc_maxlifetime', $maxtime);
session_set_cookie_params(0, '/', "." . $domain);
session_start();
}
Run Code Online (Sandbox Code Playgroud)
最重要的是0,session_set_cookie_params(0, '/', "." . $domain)然后cookie不会过期,也不需要延长其到期时间.浏览器关闭时,将删除此cookie.然后我们仅限于服务器端到期的时间.
我也遇到了问题,我无法通过jQuery Ajax PING扩展PHP会话时间,因为我在cookie中设置了PHPSESSID的到期时间.0解决了预期会话结束的所有问题.对不起我的英语不好.祝好运.
我认为这篇文章将提供您正在寻找的解决方案:PHP 中的会话超时:最佳实践
基本上,当session_start()被调用时,垃圾收集器将有 1% 的概率(默认情况下)运行。当垃圾收集器运行时,它会扫描并删除过期的会话。但是,当您是访问该页面的唯一用户(在开发过程中您可能是)或者用户很少时,垃圾收集器将仅在您访问页面时运行。这发生session_start()在调用之后,有效地重置计时器。无需尝试解决此问题,只需实现您自己的session_start()强制超时的函数即可。@Glass Robot尝试一下我上面给您的链接中发布的功能。