我想破坏我的一个Symfony2控制器中的会话,并使用以下代码:
$this->get('session')->invalidate();
但看起来这实际上没有摆脱会话数据,我必须手动删除会话变量,如下所示:
$session->remove('viewed');
$session->remove('name');
有没有办法可以解决为什么invalidate()不会清除会话?
P.S。如果我这样做:
session_start();
session_destroy();
它有效,所以它不是服务器/ php /浏览器问题。
答案 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();