CakePHP 2.x会话在本地开发和生产之间表现不一致

时间:2013-03-06 20:24:37

标签: session cakephp login cakephp-2.0 cakephp-2.3

我有一个我正在研究的CakePHP 2.x网站,它在本地执行。登录工作,会话闪存消息工作等。当我将代码推送到我的staging / prod服务器时,它正在崩溃。

登录不再有效,不显示会话闪存消息,应该重定向到/ user / login的某些控制器操作不显示任何内容(空文档)等。

我不知道问题会是什么。基于我遇到的问题以及我已经完成的一些搜索,我相信在一个仅代码的PHP文件(控制器)中,我在关闭?>之后排除了像空格这样的问题。我正在使用数据库会话,我看到会在本地实例的数据库中创建会话记录,但不会在远程登台/ prod实例上创建。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

在你的app / Config / core.php中查看这些内容。

  1. 如果您使用的是 SSL和非基于SSL的协议,请确保将cookie_secure设置为false。

    Configure::write('Session', array(
       'defaults' => 'php',
       'ini' => array(
           'session.cookie_secure' => false
       )
    ));
    
  2. 尝试将Session的配置从php defaults更改为cake或db as

    Configure::write('Session', array(
        'defaults' => 'php', // change 'php' to 'cake' or 'database'
        'cookie' => 'my_app',
        'timeout' => 4320 //3 days
    ));
    
  3. 还可以尝试将 Session.checkAgent 设置为false,只需一次,以确保它是否是浏览器问题。

  4. 尝试更改会话的 Session.name ,默认为“CAKEPHP”

    Configure::write('Session', array(
        'name' => 'New-Session-name'
        'defaults' => 'php', // change 'php' to 'cake' or 'database'
        'cookie' => 'my_app',
        'timeout' => 4320 //3 days
    ));
    
  5. 从/ app / tmp

  6. 的所有子目录中删除所有缓存文件
  7. 将调试级别设置为1,以执行缓存刷新。如果仍然没有看到错误,请尝试在php.ini中将error_reporting设置为true。 (虽然,这一点非常明显,我仍然指出它,以防你可能错过了它)

  8. 希望这有帮助

答案 1 :(得分:2)

我经常遇到的一个建议是确保在仅代码文件中关闭PHP标记之后没有空格(或者最好不要实际关闭PHP标记)。检查我的所有文件表明情况就是这样。然而,不知何故,我设法在AppController.php中的开始PHP标记之前放置了一个换行符,这就是问题所在。我向任何浪费时间的人道歉。我希望这可以帮助将来笨拙地犯同样错误的人。