0

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

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

我经历了很多这样的问题和答案,但没有一个对我有用。有任何想法吗?

4

2 回答 2

1

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

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

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

于 2012-08-08T19:33:38.350 回答
0

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

CakePHP + Facebook

$facebook->getSession() 呼叫下方的呼叫中断页面

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

于 2012-08-08T19:00:52.787 回答