如何从会话和cookie注销

时间:2014-01-24 06:59:23

标签: php session symfony cookies http-headers

我有symfony2应用程序。 我想使用控制器清除所有会话和cookie以及注销应用程序。但是当我点击浏览器中的后退按钮后,它会返回应用程序页面而不是登录页面。 在PHP header用于重定向页面,但在symfony我不知道如何解决这个问题。 这是我的代码。

的indexAction

    $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');
            }
    }

logoutAction

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');

}

如果有任何想法,请帮助我。

1 个答案:

答案 0 :(得分:0)

我只是在回顾我的问题并找到了这个问题。实际上很久以前它已经解决了。

使用

取消设置会话变量
$session->remove('<Parameter>');

实施例

$session->remove('user');