【问题标题】:symfony Delete remember me cookie when logging outsymfony 注销时删除记住我的 cookie
【发布时间】:2014-11-12 19:10:00
【问题描述】:

安全配置文件中有delete_cookieshttp://symfony.com/doc/current/reference/configuration/security.html

我启用了remember_me。一切正常,除非用户转到“注销”链接(直接从 url 栏),我希望 symfony 删除 REMEMBERME cookie。我怎样才能做到这一点?我错过了什么吗?

当我转到 url /app/logout 时,我可以看到我仍然拥有 REMEMBERME cookie 的 chrome 开发工具。

这是我的 security.yml 文件:

firewalls:     
    app_secured:
        anonymous: ~
        switch_user: true
        pattern: ^(/$|/login$|/app/)
        form_login:
            login_path: login
            check_path: login_check
            csrf_provider: form.csrf_provider
            default_target_path: index
            always_use_default_target_path: true
        remember_me:
            key: "%secret%"
            lifetime: 2592000
            path: ~
            domain: ~
        logout:
            invalidate_session: true
            delete_cookies:
                REMEMBERME: { path: null, domain: null}
            path: logout
            target: login
access_control:
    - { path: ^/app/_sys/, roles: ROLE_NO_ACCESS }
    - { path: ^/app/, roles: ROLE_USER }
    - { path: ^/app/admin/, roles: ROLE_ADMIN }

Routing.yml

login:
    path:      /
    defaults:  { _controller: AppWebBundle:Login:login }
login_check:
    path: /login_check
logout:
    path: /app/logout

LoginController.php

/**
 * Login controller.
 * @Route("/")
 */
class LoginController extends Controller
{
    /**
     * Login page
     * @Route("/login", name="login2")
     */
    public function loginAction(Request $request){
        /** Reduced for simplicity, same code as: 
            http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form **/
        return $this->render('AppWebBundle:Default:login.html.twig', ['last_username' => $lastUsername,'error'=> $error,]);
    }
}

【问题讨论】:

    标签: php symfony cookies remember-me


    【解决方案1】:
    $response = new Response();
    $response->headers->clearCookie('REMEMBERME');
    $response->send();
    

    您可以在控制器中使用此删除 cookie

    【讨论】:

    • 正确,但更喜欢$response->sendHeaders()
    【解决方案2】:

    我发现直接把登出的url放到url栏中是不行的。用户必须单击注销才能工作。

    创建一个链接<a href="{{url('logout')}}">Logout</a> 并单击它有效。

    【讨论】:

    • @JovanPerovic 我知道它没有,但它成功了。我想这与 HTTP 和缓存的工作方式有关吗?我真的不知道。我希望有人能解释一下。
    • 你确定你不只是错过了app_dev.php
    • @Ryall 不。单击注销 url 链接而不是直接将其放入浏览器 url 栏中时,一切正常。也许这是一个 Chrome 错误。
    • 这也为我修复了它。我认为不同之处在于,我将 href 创建为 /logout,而实际上它需要工作的是 server.url/logout
    猜你喜欢
    • 2016-02-16
    • 2017-12-19
    • 2012-10-01
    • 2013-12-05
    • 2016-06-03
    • 1970-01-01
    • 2015-08-08
    • 2019-03-16
    • 2015-03-12
    相关资源
    最近更新 更多