invalidate()不会清除symfony2控制器中的会话

时间:2012-11-01 20:10:09

标签: symfony

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

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

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

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

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

P.S。如果我这样做:

session_start();
session_destroy();

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

4 个答案:

答案 0 :(得分:7)

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

$session->start();      // Start the session...
$session->invalidate(); // ...then invalidate

答案 1 :(得分:5)

它确实如下工作:

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

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

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

答案 2 :(得分:4)

尝试:

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

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

$session = $this->get('session');
$ses_vars = $session->all();
foreach ($ses_vars as $key => $value) {
    $session->remove($key);
}

答案 3 :(得分:1)

如果您正在使用自定义会话名称,请先启动具有该名称的会话,然后再对其进行无效处理,以便成功清除该会话。

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

$session->setName('session_name');
$session->start();
$session->invalidate();