如何让 PHP 会话在浏览器关闭或一段时间后过期
Posted
技术标签:
【中文标题】如何让 PHP 会话在浏览器关闭或一段时间后过期【英文标题】:How to have PHP session expire upon browser close OR some extended duration of time 【发布时间】:2011-04-16 05:53:48 【问题描述】:当用户关闭浏览器时,我的 php 会话设置为过期,但我注意到如果我让浏览器长时间打开(例如 24 小时以上),会话仍然存在。
有没有办法让这些会话在浏览器关闭或经过一段时间后过期?
【问题讨论】:
How do I expire a PHP session after 30 minutes? 的可能重复项 浏览器关闭时:不,不能那样工作。否则请参阅 Palantir 链接的问题。 @fredley:你是什么意思不,它不那样工作?当我查看我的 cookie 时,我的 php sessid 设置为在浏览器关闭时过期。 也见这里***.com/questions/777767/firefox-session-cookies 【参考方案1】:解决方案可能是通过ini_set('session.gc_maxlifetime', <lifetime in seconds>);
设置数据当然如果可以通过PHP 更改配置。否则,您需要在 php.ini
中设置正确的值:
ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);
另一种方法是设置会话cookie的有效性:
$expire=24*60*60;
session_set_cookie_params($expire);
session_start();
【讨论】:
垃圾收集器是要走的路,因为当你摆弄 cookie 的生命周期时,cookie 不会在浏览器关闭时消失。请务必对未经授权的用户致电session_regenerate_id()
,以防止会话固定。
@Wrikken 您是否建议在我捕获未经授权的用户时调用 session_regenerate_id ?
使用 1 作为除数和概率可以确保我们始终检查 CPU 密集型的垃圾,对吧?
@chris:你可以根据$_SESSION
数组中的一个变量来做:session_start();if(!isset($_SESSION['id_generated_by_server'])) session_regenerate_id(); $_SESSION['id_generated_by_server'] = true;
依靠垃圾收集器为你做超时不是一个好主意。它只在 RANDOM 时间表上启动。最好将一些超时检查放入会话处理程序本身,如果空闲时间超过超时,则强制重新验证或其他操作。以上是关于如何让 PHP 会话在浏览器关闭或一段时间后过期的主要内容,如果未能解决你的问题,请参考以下文章