我正在使用CakePHP(v 1.3)和Auth组件。现在,所有的cookie都不在HTTP和HTTPS之间。
例如,用户可以使用HTTP登录而不是通过HTTPS登录,甚至更糟的用户A可以登录HTTP,用户B可以通过HTTPS登录。
这也发生在其他事情上(比如购物车中的物品)
我不知道发生了什么或如何解决它。
我需要做什么才能在HTTP和HTTPS上使用相同的Cookie?
答案 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>