【问题标题】:How to change/resume a session?如何更改/恢复会话?
【发布时间】:2015-07-22 11:09:37
【问题描述】:

我正在使用 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
    }

}

导致逻辑异常

无法更改活动会话的 ID

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

感谢您的帮助!

【问题讨论】:

  • 您是否尝试手动设置cookie PHPSESSID 并重定向用户,以便symfony 可以使用来自PHPSESSID 的值加载会话?

标签: php symfony session


【解决方案1】:

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

但是,您可以实现“记住我”功能以保持用户登录,即使他关闭浏览器并返回。

请参阅文档中有关如何实现此功能的相关章节:How to Add "Remember Me" Login Functionality

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的建议。我忘了提到我已经尝试过了,它会导致同样的错误。不幸的是,您不能以这种方式替换活动会话。目前我正在使用 Vadims 方法发送带有旧 ID 的 PHPSESSID cookie 并重新加载页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2017-06-13
    • 2020-05-21
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多