【问题标题】:How to set session variables for CakePhp to work with Chrome?如何为 CakePhp 设置会话变量以与 Chrome 一起使用?
【发布时间】:2011-10-15 17:38:00
【问题描述】:

我正在使用 CakePhp 开发一个网站。当上传到服务器并使用 Firefox 进行测试时,一切正常。

使用 Google Chrome 时,似乎没有创建会话变量。

如果我尝试访问主页,我会首先被重定向到登录页面。登录后它不会将我重定向到主页,而是再次重定向到登录页面。

我注意到会话变量不是用 Chrome 创建的,但可以在 Firefox 上正常工作。

【问题讨论】:

  • 1) 您是否在 Chrome 上禁用了 cookie? 2)它在Safari中工作吗? 3)你能提供一个链接吗?

标签: session cakephp google-chrome session-variables


【解决方案1】:

查看此页面

这是link

既然在使用浏览器时应该改变服务器的行为?好吧,我不完全知道 Chrome 对引用者做了什么,但似乎它正在以某种方式改变它。 并且 cakePHP 强制 session.referer_check 的设置为 true,从而检查多个具有相同 PHPSESSID 的请求来自同一个 url。
正如在 php.net 上发布的那样:

如果你为 session.referer_check 指定了一个值,你可以运行 当有人访问您的网站并尝试登录时遇到困难 使用大写错误的 URL。登录将失败,因为任何调用 session_start() 将导致现有会话被丢弃,并且 正在创建一个新的。这在登录时成为一个更大的问题 后跟一个 header("Location: ...") 重定向,因为 页面顶部的 session_start() 会失败。

这两个设置结合起来,你就搞得一团糟。我首先通过在 app/webroot/index.php 中强制设置 session_start() 找到了一个快速修复。但是经过更多的阅读和调试,我终于找到了罪魁祸首。

破解你的方法

没有简单的方法可以阻止 cake 设置此设置,但您可以在 Session.save 配置键中定义自己的会话处理程序。
只需在 app/config/ 中创建名为 session_custom.php 的文件并设置 Configure::write('Session.save', 'session_custom');在您的 core.php 文件中。
在该文件中,只需删除以下行(从 cake_session.php 复制/粘贴)

ini_set('session.referer_check', '');                    // Killing this f***ing config that was causing so much trouble with Chrome
ini_set('session.use_trans_sid', 0);                    // No session id in url
ini_set('session.name', Configure::read('Session.cookie'));    // Using custom cookie name instead of PHPSESSID
ini_set('session.cookie_lifetime', $this->cookieLifeTime);    // Cookie like time, depending on security level
ini_set('session.cookie_path', $this->path);                // Cookie path

【讨论】:

    【解决方案2】:

    如果我是对的,那么您正在尝试通过从 url 检索 get 值来设置会话 如果是这样,我建议您使用经典的 php 样式 url,例如 http://localhost/something/projects/view?id=4f0998ad-0538-4454-b51a-0ca46f441e7f 并使用 $_GET['id'] 在你的控制器中检索值

    我可以说是因为前段时间我也遇到过同样的问题,并且搜索了很多博客以找到合适的解决方案,但没有找到合适的解决方案,但使用上述方法解决了我的问题

    【讨论】:

    • 看起来不像 cakephp 解决方案
    【解决方案3】:

    在你的app/Config/core.php

    Configure::write('Session', array(
        'defaults' => 'cake',
            'timeout'  => 14400,  // 4 hours 
            'cookieTimeout' => 14400, // 4 hours 
            'cookie' => 'cookiename',
            )
        );
    

    检查 'cookie' 中没有空格,即使下划线也可能导致问题。

    前段时间有这个问题,我花了一段时间才弄清楚......

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 1970-01-01
      • 2016-03-15
      • 2013-01-27
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多