0

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

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

这在我的开发机器上运行良好,但在生产中,用户被重定向到登录页面。

相关代码:(不多)

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

Customer 是用于身份验证的模型。

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

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

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

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

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

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

谢谢!

4

2 回答 2

0

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

于 2010-10-09T00:11:03.723 回答
0

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

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

这是 CakePHP 标准安全特性的一部分……它设置了 INI 设置。

如果对将调用 Auth->login 的操作发出的请求来自另一个主机(域/子域/其他),PHP 将认为会话无效,从而有效地终止自动登录尝试。

于 2010-10-20T16:43:22.083 回答