在域之间手动启动具有特定id /转换会话cookie的会话

时间:2010-05-25 02:38:35

标签: session cakephp cookies

我的主机要求我使用不同的域进行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上。我是否需要做其他事情,或者有更好的方法来做我想做的事情?

3 个答案:

答案 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是如何错过它的......

如果这对您有用,请提前投票。