Yii登录在远程部署后无法工作


Yii login not working after deploying remotely

我正在尝试为正在构建的Yii应用程序设置身份验证。我从演示应用程序开始,对风格、内容和我想使用的忘记密码/电子邮件确认方案进行了一些更改。

这在本地有效。问题是,当我推送到服务器时,我无法登录。我知道在验证用户身份并存储会话或cookie(取决于main.php的配置方式)后对login()的调用成功完成。在重定向用户之前,他们会登录。但是,这不会在整个页面重定向中持续存在,例如$this->redirect(Yii::app()->user->returnUrl)

actionLogout()方法从未被调用过,我已经尝试过启用和禁用基于cookie的身份验证,而应用程序的行为没有改变。

因为它在本地工作,所以我很确定问题出在我的服务器配置上。但我看不到,因为我的phpinfo显示会话已启用。

有人知道这里可能存在什么问题吗?我将附加main.php、SiteController.php和phpinfo的输出。

main.php-http://pastebin.com/LR4i6vYZ

SiteController.php-http://pastebin.com/Fgm1a1nV

phpinfo-http://pastebin.com/CDE2WqvK

我遇到了完全相同的问题,并且已经找到了问题的原因(至少在我的例子中)。如上所述,设置cookie的TTL值不是一个好主意,因为这基本上相当于强制"记住我",但用户不知道你已经这样做了——不安全。

我遇到的问题是,虽然在部署到实时服务器时,登录在本地运行良好,但只有在设置了"记住我"的情况下才有效,这基本上将Yii切换到基于cookie的身份验证,而不是基于会话的身份验证(当不选择"记住我)。

问题是,在我的远程服务器上,Yii无法写入默认的PHP会话路径(它可以在我的本地机器上写入,但在远程服务器上用户帐户自然会被锁定得更多)。

我通过在web根目录之外创建一个会话文件夹来解决这个问题,然后在yii配置文件中将其设置为会话的保存路径。

protected>>配置>>main.php

'components'=>array(
    ...
    'session' => array (
        'savePath' => 'pathToSessionsFolder',
    ),
    ...
),

Yii现在应该能够正确地写入会话信息。带有会话id的cookie在客户端上总是正确设置的,但现在Yii应该能够将其与之前无法保存的服务器上写入的会话信息相匹配。

另一种解决方案是以同样的方式通过Yii设置中的数据库打开会话管理(如果表不存在,Yii应该创建表)。

'session' => array (
    'class' => 'CDbHttpSession',
    'connectionID' => 'db',
    'sessionTableName' => 'table_name',
),