【问题标题】:Facebook Logout not working(session always recreated). CakePHP + Facebook pluginFacebook 注销不工作(会话总是重新创建)。 CakePHP + Facebook 插件
【发布时间】:2012-08-05 15:34:05
【问题描述】:

所以,我已经有一段时间了,经历了一堆不同的问题,但仍然没有解决方案。

如果我定期登录,一切都很好,我可以按预期注销。但是,如果我使用 facebook 登录(授权应用程序),那么除非我从浏览器菜单中手动删除 cookie,否则无法注销。

按照该逻辑,我想使用此代码在注销操作中销毁 cookie(在我修改会话设置以跨子域工作之后,对于我的特殊情况):

function logout() {
        if ($this->Cookie->read('Auth.User')) {
            $this->Cookie->delete('Auth.User');
        }
        $this->Auth->logout();
        unset($_SESSION['fb_MYAPP_ID_user_id']);
        unset($_COOKIE['fbm_MYAPP_ID']);
        unset($_COOKIE['fbsr_MYAPP_ID']);
        unset($_COOKIE['CAKEPHP']);
        //pr($_SESSION);pr($_COOKIE);exit(); //here I see that the cookies are in fact deleted
        $this->redirect($this->Auth->logout());
        $this->redirect('/login');
    }

但每次注销重定向后,它都会让用户返回、登录并重新创建会话/cookie。

我经历了很多 SO 问题和答案,但没有一个对我有用。有什么想法吗?

【问题讨论】:

    标签: facebook cakephp authentication cakephp-1.3


    【解决方案1】:

    您不能简单地从 cookie 容器中取消设置 cookie,这只是请求中包含的 cookie 的服务器端表示。

    要删除 cookie,您需要设置完全相同的 cookie(域、路径、名称),但过期时间已过 - 当客户端读取时,这将导致 cookie 不会与下一个请求一起发送。

    您可以在https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L132 中查看这是如何完成的。

    【讨论】:

      【解决方案2】:

      我最终使用了以下答案的组合:

      CakePHP + Facebook

      $facebook->getSession() call breaks page below the call

      第一个的代码更完整,但是已经过时了。我还保留了我的问题中的 unset() 调用,现在它似乎工作得很好。

      【讨论】:

        猜你喜欢
        • 2012-11-25
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多