duanqiu3800 2011-05-31 05:13
浏览 78
已采纳

退出Facebook(使用PHP SDK)和CodeIgniter

Before I started implementing Facebook authentication, my logout controller looked like this:

# Kill the session
$this->session->sess_destroy();

# Redirect back to main page.
redirect('', 'location');

I tried modifying it to log the user out of Facebook as well, but no luck.

# Kill the session
$this->session->sess_destroy();

require 'application/sdk/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '625256',
  'secret' => '25256256',
  'cookie' => true,
));

$session = $facebook->getSession();

if ($session) {
    $location = (string) html_entity_decode($facebook->getLogoutUrl(array('next' => 'http://localhost:8888/taketocollege/')));
    header("Location: $location");
    exit();
}

# Redirect back to main page.
redirect('', 'location');

What am I doing wrong? I'm not looking to use the Javascript SDK for this since I want it all to be done in the controller.

Thanks!!

EDIT: To be a bit more clear, the problem is that the session isn't being destroyed. My logout controller sends users to the home page, but the home page redirects Facebook users with a session to the login page. So the Facebook users end up on the login page. Normally the login page would automatically log them in, but, by then, their session is destroyed.

  • 写回答

2条回答 默认 最新

  • dongyao5843 2011-06-02 02:26
    关注

    My code initially redirected users to the home page.

    $session = $facebook->getSession();
    
    $me = null;
    // Session based API call.
    if ($session) {
      try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
      }
    }
    
    if($session && !$this->session->userdata('logged_in'))
        redirect('login');
    

    That code was redirecting users to the login page since the session had been changed, not completely erased.

    By changing the last two lines, I was able to fix this problem:

    if($me && !$this->session->userdata('logged_in'))
        redirect('login');
    

    Hope it helps someone!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题