3

我想在我的一个 Symfony2 控制器中销毁一个会话,并使用以下代码:

$this->get('session')->invalidate();

但似乎这实际上并没有摆脱会话数据,我必须手动删除会话变量,如下所示:

$session->remove('viewed');
$session->remove('name');

有没有办法可以解决为什么 invalidate() 不清除会话?

PS如果我这样做:

session_start();
session_destroy();

它有效,所以它不是服务器/php/浏览器问题。

4

4 回答 4

7

确保您的脚本中有一个使会话无效的会话。

$session->start();      // Start the session...
$session->invalidate(); // ...then invalidate
于 2013-06-20T19:31:00.003 回答
5

它的工作原理如下:

$request->getSession()->invalidate(1);

如果您不提供任何参数,则 invalidate 会使当前会话保持不变,您必须将生命周期设置为 1(一秒)

http://api.symfony.com/2.6/Symfony/Component/HttpFoundation/Session/Session.html#method_invalidate

于 2014-12-01T12:37:15.283 回答
4

尝试:

$this->get('session')->clear();

如果这不起作用,你可以使用这个:

$session = $this->get('session');
$ses_vars = $session->all();
foreach ($ses_vars as $key => $value) {
    $session->remove($key);
}
于 2012-11-02T18:16:40.680 回答
1

如果您使用自定义会话名称,请先使用该名称启动会话,然后再使其无效以成功清除它。

$session = $this->get('session');

$session->setName('session_name');
$session->start();
$session->invalidate();
于 2014-08-31T18:50:29.293 回答