我有一个登录屏幕,我强制将其设置为ssl,所以如下所示:https://www.foobar.com/login然后他们登录后,他们被移动到主页:https://www.foobar.com/dashbaord
但是,我希望在用户登录后将其从SSL上移出(以节省CPU),因此在检查他们实际上已登录到https://www.foobar.com/dashbaord之后,我会将其移至http://www.foobar.com/dashbaord。
这似乎总是会清除会话变量,因为当页面再次运行时,它会确认它们已登录(就像所有页面一样),并且会话似乎不存在,因此它会将它们移到登录屏幕。
奇怪/发现:
我尝试过的:
nothing
因此,我觉得这是与正在创建但未被读取的cookie有关。
环境: 1. Debian 2. Apache 2 3. Mysql 4 4. PHP 5 5. CakePHP 6.会话保存为PHP默认文件
发布于 2010-11-22 01:56:05
虽然被接受的答案满足了OP的愿望,即“一旦登录,就将人们从SSL上移走”-但它是非常不安全的,因为它将用户会话暴露在劫持之下(参见Firesheep了解简单的漏洞利用)。
在CakePHP的默认行为(要求在用户通过SSL进行身份验证后为所有页面提供SSL)和接受的答案(提供所有未加密的经过身份验证的页面并公开经过身份验证的cookie)之间更好的折衷是,当且仅当页面需要身份验证时,才通过SSL提供加密的页面。
要实现这一点,一种简单的方法是维护两个会话cookies一个安全地提供并保存身份验证信息,另一个不安全地提供。支持这种双会话方法的一个简单实现将使用session_handler覆盖session.name,如下所示:
if (env('HTTPS')) {
ini_set('session.name', Configure::read('Session.cookie').'-SECURE');
}else{
ini_set('session.name', Configure::read('Session.cookie'));
}
这种方法需要记住的一点是,要从非SSL页面直接链接到需要身份验证的页面,将需要使用https显式链接-因为您将需要发送包含身份验证信息的会话cookie,而浏览器只有在链接被加密时才会这样做。
发布于 2008-11-21 12:58:20
首先,我是否正确理解了第二次登录使用与第一次完全相同的机制(通过HTTPS)?
除了在登录期间创建的会话之外,在不安全页面上的第一次点击是否会创建新的会话?
在第一次登录时,检查cookie是否没有设置Secure
标志(这意味着cookie应该只通过安全的(HTTPS)连接发送)。
发布于 2010-02-06 02:35:21
您可以在配置文件中指定自己的会话处理设置(而不是编辑CakePHP库文件)。在配置文件中,您可以将session.cookie_secure设置为0,它将优先于/cake/lib/session.php中的设置。这将允许会话cookie用于SSL连接和非SSL连接。
这里有一个关于这个主题的博客文章:http://bakery.cakephp.org/articles/view/how-to-bend-cakephp-s-session-handling-to-your-needs
以及食谱中的一些文档:http://book.cakephp.org/view/173/Sessions
https://stackoverflow.com/questions/308659
复制相似问题