网站制作学习网PHP→正文:Thinkphp session失效 session丢失
字体:

Thinkphp session失效 session丢失

PHP 2014/9/17 18:00:01  点击:不统计

http://%77%77%77%2E%66%6F%72%61%73%70%2E%63%6E
在用Thinkphp框架做登陆的时候在本地登录没有问题发现到线上后session失效,session丢失是发生在不同页面请求。我用的Thinkphp的数据库保存的Session,后来测试不使用数据库保存session,发现照样 session丢失或者session失效。 

 
我的session代码很简单
登录ForaspAction设置session如下(其他逻辑代码省略):
session("mid",$result['mid']);
获取session的CnAction 如下
$mid = session('mid');
在两个代码中我ForaspAction 中设置成功,并能在ForaspAction内部函数中获取session,但是在CnAction中无法获取。
 
我从以下几个方面检查的session,并解决了Thinkphp session或者session丢失的问题。
(1) 看Thinkphp是否报错,开启Thinkphp的debug 和showtrace两个参数,在下面的页面中找错误。首先看到了session had already been started thinkphp的错误,我们分析了一下,发现我们用了两个session_start.用一个就行。
一个是Thinkphp的session_start 另一个则是php.ini 中的  session.auto_start 我们设置的是ON(1) 我们修改后将 session.auto_start 更改为0 ,不起用自动session,Thinkphp不再报错。单是问题没有解决。
 
(2) 我在用纯手写PHP写session,发现正常,没有什么异常,通过跨文件访问session,文件夹访问session都没有问题。
 
(3) 我去掉了Thinkphp的数据库保存session选项,用纯php操作session,发现仍然有问题。Thinkphp同一个action中可以正确的读写session 在不同的action中对同一个name的session进行操作仍然有session丢失或者session失效的情况。
 
(4) 总结一下上面,看了一下session的原理,其实在所有的session中包括Thinkphp的session(当然是封装了一下),都是有个PHPSESSID的,我们可以通过服务器请求可以看到PHPSESSID。如下图
 Thinkphp session失效 session丢失
我在两个Action中看了一下sessionID 发下情况了,发现两个Action的PHPSESSID竟然不一样,这样就导致了Thinkphp中不同的Action无法获取session,不同的PHPSESSID在存储中的值是不一样的。
 
我通过浏览器查看了一下我们PHPSESSID传递,发现大问题,一个请求里面有两个PHPSESSID,当我在另一个Action中时,发现也是两个PHPSESSID,这导致页面获取的两个PHPSESSID不同,所以 Thinkphp session 失效了,在不同的页面中获取的PHPSESSID是不一样的。看下图

Thinkphp session失效 session丢失
 
解决方法,将PHPSESSID名称更换,一下我们更改了php.ini中的session.name = PHPSESSID 将session.name = PHPSESSID更改为session.name = SID,更改后我们的页面中就看到了我们的session的名称SID 看下图
 
Thinkphp session失效 session丢失
 
我们在通过Thinkphp中的Action进行直接php的sessionID的输出发现现在一样了。再次测试Thinkphp的session方法的存储和读取。就正常了。
 
以上就是解决Thinkphp在session丢失,失效,跨路径失效的方法吧。

网站制作学习网Foasp.cn

·上一篇:php 文字水印 >>    ·下一篇:php curl模拟请求ajax >>
推荐文章
最新文章