如何更改/恢复会话?

时间:2015-07-22 11:09:38

标签: php symfony session

我正在使用Symfony 2.7并尝试通过关闭浏览器窗口并清除cookie来中断已中断的会话。现在,我想通过访问页面并输入旧的中断会话的会话ID来恢复此会话。

天真的方法不起作用:

class TestController extends Controller {

    public function resumeSessionAction(Request $request) {
        $request->getSession()->setId('known old id');
        $this->redirectToRoute(...); //display route with the data from the old session
    }

}

导致LogicException

  

无法更改活动会话的ID

如果您在另一个会话中工作,通常是否可以切换会话?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

当用户在关闭浏览器后返回网站时,会话很可能不再存在。

然而,你可以实现一个"记住我"保持用户登录的功能,即使他关闭浏览器并返回。

请参阅文档中的相关章节,了解如何实现此目的:How to Add "Remember Me" Login Functionality

答案 1 :(得分:0)

使用您的代码,您正在尝试获取当前会话并更改其ID,因为您的逻辑错误指出 - 无法完成。

阅读SessionRequest类的文档,您应该做的是从给定ID创建一个新的Session对象,然后将其设置为当前会话:

$session = new Session();
$session->setId($known old id);
$request->setSession($session)