浏览器session_id一直变换

本文解决方案为转载。

原文出处链接:http://www.thinkphp.cn/topic/56517.html。

 

今天将线上项目下载到本地使用,登录后的其他操作需要去数据库验证session_id,因为session_id一直在变换,导致session验证始终都验证不了。最后的解决方案是发现配置的时候忘记配置session了,COOKIE_DOMAIN的域名还是线上的域名,所以session一直没有返回到浏览器。

特此纪录解决方案

 

 

解决方案:
1、检查session配置

浏览器session_id一直变换_第1张图片

session type是redis存储,登陆redis查看是否已写入;

2、登陆redis后,发现数据库中有很多条session记录,明显写成功了,但为什么session_id会一直变呢?

3、查看浏览器请求响应数据

浏览器session_id一直变换_第2张图片
发现浏览器请求头里面没有cookie,这样就导致每次访问,服务器端都会去创建session,session_id就一直变。

4、在入口文件index.php中指定session存放路径: ini_set('session.cookie_path', '/index');

5、检查session配置:
发现:测试环境的域名是xxxx.com,我本地的域名是bbbb.cn, 代码搬到测试环境时session的domain没及时修改。这样浏览器每次请求xxxx.com时,session.domain还是bbbb.cn,相当于跨域了,所以session_id才会一直变化。
解决:将测试环境的配置文件中session的domain改为.xxxx.com, cookie的domain改为.xxxx.com
结果:session_id不再变换,session可正常存取,用户可以正常登陆系统了。问题已解决

附上session工作原理,以便大家更明白session
浏览器session_id一直变换_第3张图片

你可能感兴趣的:(php,session,cookie)