我想在我正在开发的Cakephp应用程序中包含Facebook Connect。现在,我正在尝试使用Facebook Connect实现自动登录。每当用户的Facebook Connect状态为“已连接”时,我就可以通过向$ this->会话写入内容来启动新的登录会话,因此我已经让该功能的前半部分正常工作。当用户尝试注销时会出现问题。就像The Run Around演示应用程序一样,我有一个像这样的链接:
<a onclick="FB.Connect.logout(redirect_to_logout_action)">log out</a>
注销操作会清除登录会话变量,但在下一页上,用户仍然登录到我的站点,但不是Facebook。如果用户再次点击退出链接,用户可以退出我的网站,所以我想当他第一次尝试这样做时,他会在我的网站上获得一个新的登录会话,因为facebook_client () - &gt; get_loggedin_user()仍然返回一些东西。我在这里做错了吗?我想当我的服务器收到退出请求时,FB.Connect.logout将清除Facebook cookie:?
答案 0 :(得分:1)
让您的javascript首先执行:
FB.Connect.logout
然后
location.href="/logout.php";
在logout.php上有
session_destroy();
session_start();
答案 1 :(得分:0)
正如abales所说,我会确保重定向的任何注销操作都会针对CakePHP Session组件调用以下方法:
$this->Session->destroy();
这应该消除Cake / PHP会话。之后,重定向到任何控制器+操作适合未登录的用户。
答案 2 :(得分:0)
allyourcode,
我在几个月前建立的应用程序中遇到过类似的问题。我们使用的是Facebook组件(就像这里发现的那样:来自http://savarino.net/facebook-cakephp)。
如果我没记错的话,我们最终建立了一个看起来像这样的注销方法:
$logout_url = $this->Facebook->facebook->get_logout_url('http://' . $_SERVER['SERVER_NAME'] . $this->webroot);
try {
$this->Facebook->facebook->expire_session();
} catch (Exception $e) {
$this->Facebook->facebook->set_user(null, null);
$this->Facebook->facebook->clear_cookie_state();
}
$this->redirect($logout_url);
对不起,我不能更具体。自从我回到那个应用程序(以及之后的几个项目)以来已经有几个月了,但是,希望这会指出你正确的方向。
赛斯