【发布时间】:2014-01-24 06:59:22
【问题描述】:
我有 symfony2 应用程序。
我想使用控制器清除所有会话和 cookie 以及注销应用程序。但是注销后,当我在浏览器中单击后退按钮时,它会返回应用程序页面而不是登录页面。
在 PHP 中 header 用于重定向页面,但在 symfony 中我不知道如何解决这个问题。
这是我的代码。
索引操作
$session = $this->getRequest()->getSession();
$em = $this->getDoctrine()->getManager();
$user = new Loginsec();
if ($request->getMethod() == "POST") {
$session->clear();
$username = $request->get('user');
$password = $request->get('pass');
$remember = $request->get('remember');
if ($username != "" && $password != "") {
$Login = $this->checklogin($username, $password);
if ($Login) {
if ($remember != '') {
$response = new Response();
$cookiename = new Cookie('cookname',$username,time()+3600*24*7,'/LoginProject');
$response->headers->setcookie($cookiename);
$response->setContent($cookiename);
$response->send();
}
//Manage Session
$user->setUser($username);
$session->set('user',$username);
$session->start();
return $this->render('LoginLoginBundle:Default:Company.html.twig', array('name' => $session->get('user'));
} else {
return $this->render('LoginLoginBundle:Default:Login.html.twig', array('error' => 'Login Failed'));
}
} else {
return $this->render('LoginLoginBundle:Default:Login.html.twig', array('error' => 'Input required Fields'));
}
} else {
//Get SESSION
if ($session->has('user') && $session->has('pass')) {
$login = $this->checklogin($session->get('user'), $session->get('pass'));
if($login){
return $this->render('LoginLoginBundle:Default:Company.html.twig', array('name' => $session->get('user'));
}
}elseif($request->cookies->get('cookname')){
//Get Cookie
$request= $this->get('request');
$login = $this->checklogin($request->cookies->get('cookname'),$request->cookies->get('cookpass')) ;
if($login){
return $this->render('LoginLoginBundle:Default:Login.html.twig', array('error' => 'Login Using Cookie'));
}
} else {
return $this->render('LoginLoginBundle:Default:Login.html.twig');
}
}
注销操作
Public function logoutAction(Request $request) {
$session = $this->getRequest()->getSession();
$session->clear('user');
$session->remove('user');
unset($session);
$response = new Response();
$response->headers->clearCookie('cookname') ;
$response->send();
return $this->render('LoginLoginBundle:Default:Login.html.twig');
}
如果有任何想法请帮助我。
【问题讨论】:
-
我也遇到过类似的问题,但使用的是内置的登录/注销 Symfony2 系统。然后我找到了答案,并且是配置中的
invalidate session参数。也许对你也有用。在Session API块中查找invalidate():symfony.com/doc/current/components/http_foundation/… -
我不认为这是重复的,因为@Sameer 是用 Symfony 做的,它有自己的方法。使用 Symfony,您不需要直接处理会话,而是通过 Symfony2 构建的方法来完成。
-
嘿 Dainis,@DaniSancas 在 php 中是正确的,我可以处理会话操作,但在 symfony 中,方法与 php 方法不同。
-
我的建议有用吗?希望它做到了!
标签: php session symfony cookies http-headers