浏览器在用户返回时不记得会话?

时间:2018-02-01 00:33:44

标签: session cakephp cookies session-cookies

我运行一个基于CakePHP的网站。大约一个星期前,如果我离开页面,该网站开始忘记我已登录。所以,假设我做了以下事情:

  1. 登录
  2. 导航到网站上的某个页面
  3. 在网址栏中输入“google.com”并等待加载
  4. 在网址栏中输入我的网站并等待加载
  5. 我的预期行为是我返回到我导航到的页面。相反,仅在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中定义。

2 个答案:

答案 0 :(得分:1)

我没有足够的声誉来为您的原始帖子添加评论,但我们需要了解一些事情来进一步帮助您:

你在运行什么版本的CakePHP?

要检查的事项是: /app/Config/core.php文件的会话配置。为存储会话数据配置了什么?根据CakePHP的Session文档:

  • php - 使用php.ini文件中的标准设置保存会话。
  • cake - 将会话保存为tmp / sessions中的文件。对于不允许您在自己的家庭目录外写字的主机,这是一个不错的选择。
  • 数据库 - 使用内置数据库会话。
  • cache - 使用内置缓存会话。

无论您设置了哪个选项,请确保您有权这样做,例如你正在使用" 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中定义。