Facebook Logout无效(会话总是重新创建)。 CakePHP + Facebook插件

时间:2012-08-08 13:48:36

标签: facebook cakephp authentication cakephp-1.3

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

如果我定期登录,一切都很好,我可以按预期退出。但是,如果我使用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。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

CakePHP + Facebook

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

第一个上的代码更完整,但已过时。我还在我的问题中保留了我的unset()调用,现在看起来效果很好。