现在的位置: 首页 -> PHP学习 -> thinkphp无法登陆,session跨页后值为空

thinkphp无法登陆,session跨页后值为空

2014-06-02 22:19评论数 9 ⁄ 被浏览 29555 views+

我已经出现过两次这种问题了,出现了两次就说明第一次没有解决彻底,所以表示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传值为空的问题大概就是这几个因素了,如果还有其他原因,我会再次的补充完善。如果您有什么不清楚的,也欢迎与代潇瑞博客交流。

 

文章出自:https://www.daixiaorui.com/read/99.html 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。

目前有 9 条评论  @我要评论

  1. 9楼小鱼 : 2018-07-05 09:47:49 评论说: @回复

    还是获取不到session 我在SendMsmController/index方法中保存了session,本方法中可以获取输出session值, 在LoginController.class.php/login方法中就无法获取到 我检查了内存问题,同方法是可以保存输出的,所以内存占满应该是可以排除的, 请问像我这样的问题是什么情况呢?

  2. 8楼菜鸟 : 2018-03-24 21:04:43 评论说: @回复

    我写了俩个应用,问题出在b应用,b应用登入后将值写入session后redirect跨页就不能输出了,但是回到a应用取session居然可以取出b应用写入的session,这是什么个情况?

  3. 7楼php20 : 2017-03-23 11:01:16 评论说: @回复

    我用了上面的办法,还是没有解决,之前一直正常,从昨天开始多个thinkphp网站出现同样的问题

  4. 6楼halie : 2016-09-07 15:48:15 评论说: @回复

    今天也遇到类似的问题,session可以写入,可是dump不出值

  5. 5楼edward : 2016-04-05 18:24:14 评论说: @回复

    哎,我也遇到session问题,还是么有解决。是个别电脑高版本的浏览器和iPhone手机的浏览器会有这个问题,准确的来说是Safari高本版的会有这种问题,登录页面可以生成session,跳到下一个页面,又会重新生成一个session,新的session值是空的。其他版本浏览器就没有这个问题。

  6. 4楼完了个蛋 : 2016-03-09 17:03:39 评论说: @回复

    今天我也遇到这个问题,但却是无法解决

    回复留言标识 eliu 回复 完了个蛋: 我今天也遇到了 暂时用网上找到的方法都没有解决

    2016-03-10 15:53:42  @回复

  7. 3楼php : 2016-03-02 10:48:59 评论说: @回复

    厉害

  8. 2楼小酱油瓶 : 2016-01-06 10:55:45 评论说: @回复

    虽然我是初学者 我只会查百度 查手册 但是查了好几天的资料都没找到原因 我在新浪云SAE上做的系统 session就是莫名其妙的消失 让我头疼好久 突然看见大神 的文章 直接解决了我的session问题 很牛逼 小弟再次必须留个评论来 呱唧呱唧 再次感谢大神的分享与支持 我去找上传图片的路径问题了

  9. 1楼nothing : 2015-03-16 20:24:08 评论说: @回复

    session.save_path = "tcp://192.168.2.45:11211" so...

您的每一个评论都是对我的一份支持

 博客二维码

昵称 *

邮箱 *