【问题标题】:CakePHP 2.x sessions behaving inconsistently between local dev and productionCakePHP 2.x 会话在本地开发和生产之间的行为不一致
【发布时间】:2013-02-21 19:54:19
【问题描述】:

我有一个我正在开发的 CakePHP 2.x 站点,该站点按预期在本地运行。登录有效,会话闪存消息有效,等等。当我将代码推送到我的登台/生产服务器时,它会中断。

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

我不知道会出现什么问题。根据我遇到的问题和我所做的一些搜索,我相信我已经排除了在纯代码 PHP 文件(控制器)中关闭 ?> 后出现的空格等问题。我正在使用数据库会话,并且我看到在本地实例的数据库中创建了会话记录,但在远程暂存/生产实例上却没有。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您可以通过相同的用户凭据从生产服务器连接到数据库吗?
  • 不同的数据库和不同的信用,但是是的,数据库连接正在工作。我刚刚做了一个添加新用户记录的测试,并得到了类似的奇怪行为。加载/显示添加表单,单击提交(发布到相同的 /users/add URL)我得到一个完全空白的页面/空文档,回到 /users/index 视图我可以看到新记录已添加。奇怪。

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


【解决方案1】:

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

【讨论】:

  • 我仍然想知道为什么在我的本地实例 (Mac OS) 和同事的 (Windows) 上一切正常,但在暂存 (Linux) 服务器上却不行。
【解决方案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 默认更改为 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. 将调试级别设置为 1,以进行缓存刷新。如果您仍然没有看到错误,请尝试在 php.ini 中将 error_reporting 设置为 true。 (虽然,这个很明显,我还是指出来以防你可能错过了)

希望对你有帮助

【讨论】:

  • 我已经查看了这些项目(至少是适用于我的情况的项目),但它们似乎都不是问题,或者至少没有透露任何内容。我注意到一个更基本的问题,这似乎是那些应该重定向的动作不是出于某种原因。添加新记录(并且记录确实添加成功)会产生一个带有 200 HTTP 响应的空白页面,而不是预期的 302。为什么我的本地环境和暂存/生产环境之间的行为不一致仍然是个谜。不过感谢您的建议。
猜你喜欢
  • 2010-11-27
  • 2015-05-28
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2011-10-22
  • 2015-04-13
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多