我有一个强制使用 ssl 的登录屏幕,如下所示:https://www.foobar.com/login然后他们登录后,就会转到主页:https://www.foobar.com/dashbaord
但是,我希望人们在登录后就不再使用 SSL(以节省 CPU),因此在检查他们是否确实登录后https://www.foobar.com/dashbaord我把它们移到http://www.foobar.com/dashbaord
好吧,这似乎总是会清除会话变量,因为当页面再次运行时,它确认它们已登录(就像所有页面一样)并且会话似乎不存在,因此它将它们移动到登录屏幕。
奇怪/发现:
- 项目清单
- 第二次登录总是有效,很高兴让我http://www.foobar.com/dashbaord
- 第一次登录成功创建cookie
- 如果我登录两次,然后注销,然后再次登录,我不需要两次登录(我似乎已经追踪到cookie存在的事实)。如果我删除 cookie,我就会回到两次登录状态。
- 第二次登录后,我可以从 ssl 切换到非 ssl,并且会话仍然存在。
- 第一次登录时,移动到非 ssl 站点会完全清除会话,手动移回 ssl 站点仍然迫使我再次登录。
- 第二次登录使用与第一次完全相同的机制,通过 ssl
我尝试过的:
- 使用 Cake 的 security.level 和 session.checkagent 设置 - 什么都没有
- 让 cake 将会话存储在数据库中(而不是文件系统)-什么也没有
- 在 XP 机器上在 FF、IE、Chrome 中进行测试。
所以我觉得这与 cookie 被创建但未被读取有关。
环境:
1. Debian
2.阿帕奇2
3.MySQL 4
4. PHP 5
5.CakePHP
6. 会话被 PHP 默认保存为文件
我明白了这一点。 Cake 在 SSL 连接下自动切换 session.cookie_secure ini 值,因此创建的 cookie 是一个安全 cookie,第二个页面无法识别。
解决方案,注释掉/cake/lib/session.php第420行ish:
ini_set('session.cookie_secure', 1);
(只需搜索即可找到它,因为我确信 # 行会随着版本的发布而改变。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)