CakePHP的Auth->登录不在生产中,但在测试中工作

时间:2010-10-09 00:05:38

标签: cakephp login authentication autologin

我有一个一直运作良好的CakePHP网站。

我刚开发了一项新功能,可以在某个时刻自动记录用户,并将他重定向到登录墙后​​面的页面。

这在我的开发机器中非常有效,但在生产中,用户会被重定向到登录页面。

相关代码:(不多)

    $objCustomer = $this->Customer->findById($customerId);
    $this->Auth->login($objCustomer);
    $this->redirect("/customers/signup");

客户是用于身份验证的模型。

在服务器中,我看到我被重定向到/ customers / signup,并将我重定向到/ customers / login

让我最困惑的是,这在我的机器中完美运行。

我在服务器中转储了Auth-> Login的返回值,它返回1,所以理论上一切都很好,用户应该已经登录。

我能想到的一些事情在我的机器和服务器之间是不同的:

  • Dev机器是Windows,Server是Linux。这有时会引入区分大小写的问题,但我重定向到的注册方法都是小写的,我不知道这里会出现这样的问题。
  • 开发者机器是IIS,服务器是LiteSpeed。也许Litespeed正在搞什么?这将是一年多来第一次在生产中运行这个网站,因为LiteSpeed,我发现了一些不同的东西
  • 生产站点是通过SSL,dev不是。我不知道这可能是一个什么问题。

任何想法都是无限欢迎的!

谢谢!

2 个答案:

答案 0 :(得分:0)

在开发模式下,我的计算机上的身份验证工作正常,但在生产模式下无法在服务器上运行,我也遇到了问题。令人惊讶的是,当我将服务器更改为开发模式时,它开始正常工作。然后我改回生产,它仍然在工作。也许这是一些缓存问题。

答案 1 :(得分:0)

经过LOOOONG尝试不同奇怪事物的过程后,事实证明这一切归结为:

ini_set('session.referer_check', $this->host);

这是CakePHP标准安全功能的一部分......它设置了INI设置。

如果对“将调用Auth->登录的操作的请求来自另一个主机(域/子域/无论什么)”,PHP将认为该会话无效,这有效地杀死了自动登录尝试。