我的主机要求我使用不同的域进行SSL安全访问(共享SSL),因此我需要在两个域之间转换用户会话。页面的一部分位于http://example.com
,而SSL部分位于https://example.hosting.com
。因此,我无法设置跨域cookie。
我要做的是转换会话ID并重新设置cookie,如下所示:
http://example.com/normal/page
,用户点击指向安全区域的链接,然后转到:http://example.com/secure/page
,导致重定向:https://example.hosting.com/secure/page?sess=ikub...
,它会重新启动会话并设置一个对该域有效的新Cookie,然后重定向到:https://example.hosting.com/secure/page
这可以解决会话应该复活的问题。我在做:
function beforeFilter() {
...
$this->Session->id($_GET['sess']);
$this->Session->activate();
...
}
据我所知,应该使用给定的ID启动会话。它实际上会生成一个新的会话ID,并且此会话为空,数据不会恢复。
这是在CakePHP 1.2.4上。我是否需要做其他事情,或者有更好的方法来做我想做的事情?
答案 0 :(得分:2)
当Configure::write('Security.level')
设置为medium
或更高时,session.referer_check
会被隐式激活,这会导致整个事情失败。将安全级别设置为low
(或使用自定义会话配置)可使一切正常运行。
大约需要5个小时的调试......( - _ - ;;)
答案 1 :(得分:0)
我的第一个想法是使用Cake文件会话并复制文件,然后尝试用该phpsessid开始一个新的会话,虽然我甚至不确定这是否真的有效:)
答案 2 :(得分:-1)
使用Cake 2.6.1 - 这对我有用。
$this->Session->id("tfvjv43hjmsnjkh0v3ss539uq7"); // add session id you want to set
$this->Session->id();
$this->Session->read("key"); // hhoorray worked :)
使用SessionComponent id()函数需要使用session id调用两次以设置session_id();第二次开始蛋糕会议。 第一次通话并没有真正开始会议......我不知道Cake Guys是如何错过它的......
如果这对您有用,请提前投票。