CakePHP Cookie /会话问题

JD *_*cks 20 cookies session internet-explorer cakephp cakephp-1.3

我的CakePHP应用程序出现问题.这似乎只发生在IE中,并且仅在某些计算机上发生.虽然它在计算机上是一致的.

问题一: 用户已登录并在页面https://example.com/users/view上点击退出.用户被重定向到http://example.com并且似乎已注销,直到用户访问另一个https页面并且他们仍然登录.他们可以根据需要单击注销,但他们始终登录https并且只能在http上注销.

问题二: 用户登录https://example.com/users/signin,他们会被重定向到http://example.com,现在似乎已登录.用户访问https://example.com/admin/幻灯片,但现在还不知道,但现在已注销,点击任何其他页面(或只是刷新当前页面)将要求他们再次登录.

我不知道是怎么回事.我已经阅读并尝试了在这两个类似问题上描述的解决方案:从ssl转移到非ssl时会话不保存,在IE中不更新/覆盖Cookie但我仍然遇到同样的问题.

到目前为止,我注意到的唯一线索(并且我不知道这是否意味着什么)就是当我在HTTP页面上调试时$_SESSION,$this->Session->read()总是只有$ this-> Session-> read()返回一个值.在HTTPS页面上,有些ALWAYS总是为两者返回相同的值,其他ALWAYS只返回$ this-> Session-> read()的值.

例如,http://example.comhttps://example.com/users永远不会看到$ _SESSION,https://example.com/carts总是会看到$ _SESSION.我不确定,但我在想,也许安全页面可能会看到它,因为有些可能不会出现问题,但是当我检查代码时,我看到没有区别,这表明为什么一个人做,一个人没有吨.

此外,如果我$this->Session->destroy()在AppController中添加到beforeFilter,那么所有页面甚至HTTP都可以看到$ _SESSION.我实际上并没有在我的应用程序中使用$ _SESSION,我只是觉得这可能是一个错误的线索.


UPDATE

我接受了Gustav Bertram的建议并查看了用户代理字符串.我在没有问题的计算机上将用户代理字符串与IE上的IE进行了比较.它们是相同的,除了有问题的用户代理字符串中有"google chrome frame".我从该计算机上卸载了Google Chrome Frame,重新启动,再次尝试,问题似乎已经解决了.

如果这是真正的原因,那么简单的解决方案就是让用户卸载Chrome框架.但是我想知道是否有一个解决方案可以让他们安装镀铬框架并且仍然有效.

Sco*_*ell 17

尝试将以下内容添加到您的core.php文件中:

Configure::write('Session.checkAgent', false);
Configure::write('Session.ini',array('session.cookie_secure' => false, 'session.referer_check' => false));
Run Code Online (Sandbox Code Playgroud)

这些参数应该强制Cookie即使通过Google Chrome Frame也能保留.这将设置PHP和CakePHP的设置,以允许cookie通过http和https持久化.


Gus*_*ram 6

我的建议是你直接查看数据包,看看cookie发生了什么.

在客户端计算机上安装Wireshark,并连接到远程Web服务器.(Wireshark将忽略localhost流量.)

我的怀疑是你的cookie要么被破坏了(我曾经有一些被PHP破坏的cookie!)或者它们被卡住(这将是IE的错).无论哪种方式,您都会获得有关出错的更多信息.

作为最后的手段,检查代码中的用户代理字符串是否有违规/不受支持的IE版本,并敦促人们进行升级.