而不是搜索文件(这涉及更多的 i/o )等,
什么是会话cookie:会话 Cookie http://en.wikipedia.org/wiki/HTTP_cookie#Session_cookie
更好的方法是将“最近活动”的时间戳存储在 $_SESSION 变量中。
并更新每个请求的会话数据(包括自动定期 ajax 调用,如果有的话)。
假设您想在 10 分钟后取消会话设置,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
为了避免像这样的攻击会话固定 https://www.owasp.org/index.php/Session_fixation:(会话固定是一种允许攻击者劫持有效用户会话的攻击)定期重新生成会话 ID,例如 5 分钟(我建议将重新生成时间和会话过期时间保留得更长一些)。更详细的攻击列表:攻击列表 https://www.owasp.org/index.php/Category:Attack.
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
另外,请确保session.gc-maxlifetime
设置为您要使用的最长过期时间。
你可以这样做
ini_set('session.gc-maxlifetime', 600)
或者
直接在 php.ini 中设置。
and also
session.cookie_lifetime http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime :
session.cookie_lifetime 指定发送到浏览器的 cookie 的生命周期(以秒为单位)。
但是,销毁会话必须在服务器端而不是客户端进行处理。
将 session.cookie_lifetime 设置为 0 将使会话 cookie 的行为方式与会话 cookie 的行为方式相同,即会话 cookie 仅在浏览器关闭之前有效。
虽然这种方法有点繁琐,但是比较优雅。
啊,找到了我很久以前读过的链接! :如何让 PHP 会话在 30 分钟后过期? https://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes