【问题标题】:How to logout from session and cookies如何从会话和 cookie 中注销
【发布时间】: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


【解决方案1】:

我只是在查看我的问题并找到了这个问题。其实早就解决了。

使用取消设置会话变量

$session->remove('<Parameter>');

例如

$session->remove('user');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 2012-01-21
    • 2021-03-14
    • 2019-03-16
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多