修改核心代码在大多数情况下是一件坏事,在你的情况下,有可能做你需要做的事情,但是蛋糕的方式。
在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 的大部分好处都将消失,因为由于 HTTPS 和 HTTP 使用相同的会话 cookie,这变得很容易窃取它,然后窃取 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 的部分只需要一个会话才能获得更流畅的导航。