关于chrome浏览器中, php session超时没有达到预期的问题

本文探讨了PHP中Session的管理方式,特别是如何通过调整cookie和session的超时时间来实现更灵活的用户会话控制。此外,还介绍了几种自定义超时判断的方法,包括通过设置cookie的超时时间和在页面加载时更新session过期时间。

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参数?)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值