我正在尝试为我正在构建的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
答案 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',
),