php 的session位置保持方式 目前是cookie方式
session.use_only_cookies = 1
session.name = PHPSESSID
session.cookie_lifetime = 0 #窗口关闭就删除cookie
一般浏览器 关闭窗口后在开, session就会失效。 但chrome浏览器不是的, 它会恢复原来的cookie。 是因为设置了 启动时 “从上次停下的地方继续”
另外服务器的 session.gc_maxlifetime 和 session.cache_expire 设置了之后 好像超时时间不是预期的那样。
查资料发现是gc_probability除以gc_divisor 配置的概率值 触发真正回收的。
https://blog.csdn.net/liaobangxiang/article/details/82116419
https://www.cnblogs.com/fps2tao/p/8666377.html
网上的方法一, php.ini设置cookie和 session超时时间
ini_set('session.gc_maxlifetime', "3600"); // 秒
ini_set("session.cookie_lifetime","3600"); // 秒
我试了一下 应该是 cookie超时 时间一到 PHPSESSID的cookie必定会被移除, 就算你不停的再刷新页面。
至于方案二 感觉 不错, 就是不管 本身的session配置。 直接在一个每个页面都会引用的页面 加上一个自己的超时判断。
if(isset($_SESSION['expiretime'])) {
if($_SESSION['expiretime'] < time()) {
unset($_SESSION['expiretime']);
header('Location: logout.php?TIMEOUT'); // 登出
exit(0);
} else {
$_SESSION['expiretime'] = time() + 3600; // 刷新时间戳
}
}
鉴于 这个方案,我也想到了一个 不停设置cookie超时的方案,也能满足 不停地操作 不会超时, 长时间不操作会超时的实现:
在每个页面都会引用的代码里(一般是超时判断跳转到登录页面的代码前面)加上:
if(isset($_COOKIE["PHPSESSID"])) {
setCookie("PHPSESSID",$_COOKIE["PHPSESSID"],time()+600,"/");
}
这样 只要用户点一下页面,cookie就会增加10分钟超时, 如果10分钟后都不操作则肯定需要重新登录。就算浏览器关了恢复。
(注chrome setCookie时 好像一定要有path参数?)
本文探讨了PHP中Session的管理方式,特别是如何通过调整cookie和session的超时时间来实现更灵活的用户会话控制。此外,还介绍了几种自定义超时判断的方法,包括通过设置cookie的超时时间和在页面加载时更新session过期时间。

960

被折叠的 条评论
为什么被折叠?



