我运行一个基于CakePHP的网站。大约一个星期前,如果我离开页面,该网站开始忘记我已登录。所以,假设我做了以下事情:
我的预期行为是我返回到我导航到的页面。相反,仅在Chrome中,我现在转发到登录页面,但可以输入任何内容作为用户名和密码,并将被发送到我之后导航到的页面(登录)。我在Safari和Firefox中获得了预期的行为。
问题仅发生在生产站点(https://example.com)上,而不是通过MAMP(http://example.local:8888)在本地开发站点上发生。
我想做更多的调试,但是我担心我对预期行为如何实现的了解足够薄,以至于我有点亏,除了说清除cookie没有帮助。关于我应该研究什么的任何建议?
非常感谢你。
已解决!
在vhosts文件中转发到该站点的http版本,我依靠CakePHP的安全组件重定向到https。出现问题是因为安全组件将默认的http://example.com/index.php(例如)重定向到https://example.com/index.php时,CakePHP会停在那里,并且不会检查用户的会话是否应该显示不同的页面。
解决方案是编辑vhosts以重定向到https(因为我应该开始)。值得一提的是:确保vhosts.conf中定义的虚拟主机与ssl.conf中的任何虚拟主机不冲突非常重要 - 否则安全组件会提供重定向循环。我的ssl虚拟主机现在完全在ssl.conf中定义。
答案 0 :(得分:1)
我没有足够的声誉来为您的原始帖子添加评论,但我们需要了解一些事情来进一步帮助您:
你在运行什么版本的CakePHP?
要检查的事项是: /app/Config/core.php文件的会话配置。为存储会话数据配置了什么?根据CakePHP的Session文档:
无论您设置了哪个选项,请确保您有权这样做,例如你正在使用" cake"会话并且需要对生产服务器上的tmp / sessions文件夹具有写访问权。
如果会话配置不是问题,我建议你去AppController.php和beforeFilter()函数调试会话数据:
CakePHP 1.x和2.x:
debug($this->Session->read());
CakePHP 3.x:
$session = $this->request->session();
debug($session->read());
这将在屏幕顶部输出您在会话中存储的内容。我希望这可以帮助您解决问题。
答案 1 :(得分:0)
(代表问题作者发布的解决方案,以便将其移至答案空间)。
在vhosts文件中转发到站点的http版本,我依靠CakePHP的Security组件重定向到https。之所以出现问题,是因为当安全组件将默认的http://example.com/index.php(例如)重定向到https://example.com/index.php时,CakePHP在那里停止了,并且不检查用户的会话是否应该显示其他页面。>
解决方案是编辑虚拟主机以重定向到https(我应该首先开始)。值得一提的一点是:确保vhosts.conf中定义的虚拟主机与ssl.conf中的任何虚拟主机都不会冲突-否则安全组件会提供重定向循环。我的ssl虚拟主机现在完全在ssl.conf中定义。