标签:cookies authentication yii session php
我正在尝试为我正在构建的Yii应用程序设置身份验证.我从演示应用程序开始,对样式,内容和要使用的忘记密码/电子邮件确认方案进行了一些更改.
这在本地有效.问题是,当我推送到服务器时,我无法登录.我知道对login()的调用是在对用户进行身份验证并存储会话或cookie后完成的,具体取决于main.php的配置方式成功.在重定向用户之前,他们已经登录.但是,这不会在页面重定向中持续存在,例如$this-> redirect(Yii :: app()->用户-> 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>> config>> main.php
'components'=>array(
...
'session' => array (
'savePath' => 'pathToSessionsFolder',
),
...
),
Yii现在应该能够正确写入会话信息.具有会话ID的cookie总是在客户端上正确设置,但是现在Yii应该能够将其与服务器上写入的会话信息进行匹配,否则该信息将无法保存.
一个替代的解决方案是以相同的方式通过Yii设置中的数据库打开会话管理(如果表不存在,Yii应该创建表).
'session' => array (
'class' => 'CDbHttpSession',
'connectionID' => 'db',
'sessionTableName' => 'table_name',
),
标签:cookies,authentication,yii,session,php 来源: https://codeday.me/bug/20191123/2064890.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。