Cookie与站点的HTTPS部分之间的Cookie不同步

时间:2011-10-28 14:25:33

标签: cakephp cookies https

我正在使用CakePHP(v 1.3)和Auth组件。现在,所有的cookie都不在HTTP和HTTPS之间。

例如,用户可以使用HTTP登录而不是通过HTTPS登录,甚至更糟的用户A可以登录HTTP,用户B可以通过HTTPS登录。

这也发生在其他事情上(比如购物车中的物品)

我不知道发生了什么或如何解决它。

我需要做什么才能在HTTP和HTTPS上使用相同的Cookie?

2 个答案:

答案 0 :(得分:0)

这可能是由安全cookie引起的,只有在通过https访问页面时才会发送。如果通过https访问页面,CakePHP会自动设置session.cookie_secure。

要停用此行为,请将ini_set('session.cookie_secure', 1);更改为ini_set('session.cookie_secure', 0);内的cake\libs\cake_session.php

我建议在应用程序端处理它,并允许仅通过https登录(和所有成员页面)。

答案 1 :(得分:0)

修改核心代码大部分时间都是坏事,在你的情况下,有可能做你需要的,但是Cake方式。

在app / config / core.php中:修改 Session.save

//Configure::write('Session.save', 'php');

//this will look for a 'mysession.php' file in app/config
Configure::write('Session.save', 'mysession'); 

在app / config中:使用您想要的会话参数创建 mysession.php 文件

ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie'));
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 
ini_set('session.cookie_path', $this->path);

//overwrite Cake setting already set by CakeSession 
ini_set('session.cookie_secure', 0); 

另请注意,如果您将Cookie设置为不安全,则使用HTTPS的大部分好处都将消失,因为同一会话cookie用于HTTPS HTTP,因此很容易窃取它然后窃取HTTPS的会话。

我遇到了一个webapp,其中包含通过HTTPS的管理部分和通过HTTP的公共部分,也需要会话。我设法通过指定两个不同的cookie名称来分隔这两个部分:

在app_controller.php中:

if(env('HTTPS')
{
    Configure::write('Session.save', Configure::read('Session.save') . '_https');
}

在app / config中,使用

创建另一个名为* mysession_https.php *的文件
ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie') . 'S');

//cookie destroyed when users close their browser 
ini_set('session.cookie_lifetime', 0); 

ini_set('session.cookie_path', $this->path);

ini_set('session.cookie_secure', 1); 

这会创建两个不同的会话,一个通过HTTP,一个通过HTTPS,但在我的情况下它很好,因为所有敏感或私有数据都是通过HTTPS而且HTTP上的部分只需要一个会话才能获得更平滑的导航。 / p>