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

use*_*580 3 symfony

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

$this->get('session')->invalidate();
Run Code Online (Sandbox Code Playgroud)

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

$session->remove('viewed');
$session->remove('name');
Run Code Online (Sandbox Code Playgroud)

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

PS如果我这样做:

session_start();
session_destroy();
Run Code Online (Sandbox Code Playgroud)

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

小智 7

确保在脚本中有会话无效.

$session->start();      // Start the session...
$session->invalidate(); // ...then invalidate
Run Code Online (Sandbox Code Playgroud)


not*_*ure 5

它的工作原理如下:

$request->getSession()->invalidate(1);
Run Code Online (Sandbox Code Playgroud)

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

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


Mat*_*ijk 4

尝试:

$this->get('session')->clear();
Run Code Online (Sandbox Code Playgroud)

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

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