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

时间:2013-07-03 07:57:37

标签: php session authentication cookies yii

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

这适用于本地。问题是,当我推送到服务器时,我无法登录。我知道在验证用户并存储会话或cookie之后调用login(),具体取决于main.php的配置方式,完成成功。在重定向用户之前,他们已登录。但是,这不会在页面重定向中持续存在,例如, $这 - >重定向(Yii的::应用程序() - >用户> 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

1 个答案:

答案 0 :(得分:3)

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

我遇到的问题是,虽然在部署到实时服务器时登录工作正常,但只有在设置“记住我”时才能正常工作,这实际上将Yii切换到基于cookie的身份验证而不是基于会话(如当你不选择“记住我”时,你会得到。)

问题是在我的远程服务器上,Yii无法写入默认的PHP会话路径(它能够在我的本地计算机上执行此操作,但在远程服务器上,用户帐户自然更加锁定了)

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

保护的>>配置>> main.php

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

Yii现在应该能够正确地编写会话信息。具有会话ID的cookie始终在客户端上正确设置,但现在Yii应该能够将其与服务器上写入的会话信息相匹配,然后才能保存它。

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

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