PHPSESSID 过期问题

PHP中文网
发布: 2017-05-20 13:24:24
原创
5319人浏览过

停留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就被重新分配了(同一个页面一直刷新)  
找不出原因

乐活途购物分享社区
乐活途购物分享社区

beta v1.1版本为第一个版本,简单的整合了基础功能,各位站长拿到程序后,不要纠结后台的功能简单,后续将不断更新扩展。在beta v1.1版本使用过程中遇到什么问题,请登录 www.loftto.com 进行反馈! 安装说明######重要提醒:程序不支持二级目录安装,请使用一级目录或二级目录绑定!#第一步,确定你的服务器支持PHP+mysql。#第二步,确定你的服务器开启了gd库。#第三步,

乐活途购物分享社区 0
查看详情 乐活途购物分享社区

立即学习PHP免费学习笔记(深入)”;

 

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速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号