mysql phpsessid_PHPSESSID 过期问题

停留N分钟,刷新PHPSESSID变了,登陆的用户也就自然退出了

现在问题是找不到导致PHPSESSID变的原因

session.cookie_lifetime = 0

ps:ini_set('session.use_cookies', 1);//使用COOKIE保存SESSIONID的方式

ini_set('session.cookie_domain', 'abc.com');

回复讨论(解决方案)

用的thinkphp 框架 3.23<?php

'SESSION_OPTIONS'=>array('type'=> 'db',//session采用数据库保存

'expire'=>7200,//session过期时间,如果不设就是php.ini中设置的默认值

),

'SESSION_TABLE'=>'v4_session', //必须设置成这样,如果不加前缀就找不到数据表,这个需要注意

?>

session一定要用session_set_save_handler重写.

其实你设定过期时间一年后,但是其他没有保存为一年后的用户还会触发session的gc,从而强制回收你的session.

两种方法重写:

1. 存储redis,mysql等数据库, 过期时间你自己控制.

2. 存储文件,我的技巧是强制修改session文件的时间为未来的时间,这样其他用户触发gc后就没法回收你的session文件了.

存的数据,session是跟随cookie的,问题是cookie这边sessid过期换掉了,而不是session过期

session.gc_maxlifetime = 1440; 指定最后一次访问后的 1440 秒失效

但是否真的失效,取决于

session.gc_probability 和 session.gc_pisor 比值(失效概率)

对于 thinkphp,你有 'expire'=>7200

那么应在最后一次访问的 7200 秒(2小时)后失效

如果不是这样,那就放弃 thinkphp

很程序没关系,程序存到数据库的都是正常的。7200是有效的

是因为PHPSESSID 值失效(a变b),a在数据库里是存在,但b是不存在的,所以相当导致用户的整个session失效

服务器上session失效,网页刷新当然重新分配了一个sessionid啊

session.cookie_lifetime=0指的是在浏览器关闭时删除cookie,除非手动删或者被其他软件强清了

不知道对不对,PHPSESSID 是根据cookie传到客户端,用来判断用户的唯一性,如果cookie设置0秒,会自动清空,客户端没有phpsessid,服务端当然会重新分配一个,所以就注销了。

服务器session没有失效,存的数据库。。。

是因为存在coookie 的 phpsessid 值变了,而这个phpsessid在数据库里是没数据的

对的,问题是系统配置是2个小时,有时候10分钟有时候1个小时PHPSESSID就被重新分配了(同一个页面一直刷新)

找不出原因

session和cookies那点事说难不难, 说简单也不简单, 整到完美磨合,俩合作完美无间要仔细研究下,不过封装好以后就省事了.

你看看你是不是session_id($_COOKIES['sess_id']);没有这样接管.

还有cookies的作用域问题,作用路径问题,查查setcookie参数你就知道了...

正常不会这样,既然tp设置了7200实效,根据session.gc处理,只会在7200秒后执行清除

你可以检查是否有其他程序导致session实效。

之前做法是,把session保存在cookies,如果判断session失效但cookie没有实效,则把cookie复制入session处理。

已经找出问题<?php

function session($name='',$value='') {

ini_set('session.gc_maxlifetime', $name['expire']);

//ini_set('session.cookie_lifetime', $name['expire']);}

?>

是TP的这里重写了session存在cookie的生存周期导致sessionid在cookie的存活周期是我们设置的那个参数

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值