tinkphp中session无法跨方法获取

我已经出现过两次这种问题了,出现了两次就说明第一次没有解决彻底,所以表示thinkphp这个跨页后session为空而无法登陆的问题牵扯很多方面的问题了。经过这两次的研究,我觉得基本上能真正解决它了。

 

第一次出现的时候,我以为是目录不可写,检查了半天没发现问题,于是各种百度,才发现别人也有遇得类似问题,就是跨页传递session为空。(温馨提示:不喜欢听流水账的可以略过以下两段,直接看下面的解决措施。)我调试了一下程序,将登陆跳转后的页面print_r($_SESSION),果然为空值。最后查找资料说是要把 use_trans_sid 的值改为 1,于是在配置文件中加了一行:'SESSION_OPTIONS' => array('use_trans_sid'=>1),然后再登陆的时候就好了。

 

第二次,换到另一个环境的时候又出现问题了,于是我又到网上查资料,很可惜,这次找了半天都没有解决,瞬间感慨国内编程这一块的资源匮乏程度还是挺严重的啊,所以我只有自己摸索了。首先排除目录权限和其他一系列问题后,我意识到这次的问题应该也是php设置的问题。于是我把本地的phpinfo和出问题那台虚拟空间的phpinfo输出来,一行一行比较session那块选项。最后我发现有一行配置不一样,如下图:

 

phpinfo

 

这里的session.use_only_cookies的值是on,也就是1,而我本地的是off。我马上意识到是这里的问题了,于是又在配置文件中加了一个参数 'SESSION_OPTIONS' => array('use_trans_sid'=>1,'use_only_cookies'=>0),同时还要在thinkphp/Common/functions.php的550行左右加上一句if(isset($name['use_only_cookies']))  ini_set('session.use_only_cookies', $name['use_only_cookies']?1:0); 因为thinkphp默认没有定义这个选项。瞬间,又能登陆了。

 

session.use_only_cookies

 

经过这两次的问题,最后,代潇瑞博客总结出一下几点导致不能正常登陆、session传值为空的原因:

 

1. 首先检查存放session的目录是否可写。

 

2. 如果您用的是空间的话,有些空间文件数目上线也有限制,比如一个200MB的空间,空间单个文件数不能超过45000,当文件满后,就不能在写入文件了,如果你session路径设置在web目录下,也就会影响session无法写入了。

 

3. 就是将“use_trans_sid”的值设为1,可以在配置文件中加入“SESSION_OPTIONS' => array('use_trans_sid'=>1)”这行代码,让session可以跨页传值。

 

4. 这个是最不容易发现的,我找了好半天,网上也没有提到这个。也是session的设置选项问题,在第3点的基础上加一个“'use_only_cookies'=>0”选项,即:“SESSION_OPTIONS' => array('use_only_cookies'=>0,'use_trans_sid'=>1)”,同时还要在thinkphp/Common/functions.php的550行左右加上一句if(isset($name['use_only_cookies']))  ini_set('session.use_only_cookies', $name['use_only_cookies']?1:0); 因为thinkphp默认没有定义这个选项。

 

不能正常登陆、session传值为空的问题大概就是这几个因素了,如果还有其他原因,我会再次的补充完善。如果您有什么不清楚的,也欢迎与代潇瑞博客交流。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值