9

我正在facebook为我的网站使用facebook php sdk.

我注意到logout链接没有做任何事情。注销后,用户仍然可以浏览该站点。这是我的代码facebook.php

<?php
    require 'src/facebook.php';
    $facebook = new Facebook(array(
           'appId'  => '*************',
           'secret' => '******************************',
    ));
    $user = $facebook->getUser();
    $loginUrl = $facebook->getLoginUrl();
    echo "<a href='$loginUrl'>login</a>";

    $logoutUrl = $facebook->getLogoutUrl();
    echo $loginUrl; 
    if($user){
        session_start() ; 
        $_SESSION['user_info'] = $user; 
        $_SESSION['user_pro']= $facebook->api('/me');
        print_r($_SESSION);
    }
    else{
        echo 'not logged in '; 
    }

    echo "<a href='example.com/logout.php'>log out </a>"
?>

code在登录时工作正常。注销链接应该会破坏会话。这是页面的标题:

<?php 
    print_r($_SESSION) ; 
    header('example.com') ; 
?>

我的logout.php页面的问题是它根本没有检测到会话。我不知道这是一个facebook api问题还是我的php问题。

您如何使用 facebook SDK 注销用户?

4

5 回答 5

20

您可以通过将您的网站网址提供给下一个参数并销毁会话来从您的网站以及 Facebook 注销,如下所示

$token = $facebook->getAccessToken();
$url = 'https://www.facebook.com/logout.php?next=' . YOUR_SITE_URL .
  '&access_token='.$token;
session_destroy();
header('Location: '.$url);

您还必须将它们从您的网站中注销,并且您必须防止您的网站自动记住您的用户并立即重新登录。

禁用自动登录用户的代码并尝试再次注销。销毁会话不会阻止您的站点为记​​住的用户创建一个全新的有效会话。

于 2012-07-18T08:18:02.430 回答
1

这是我的网站的 PHP 注销代码,它使用 facebook 登录和注销用户。您不必破坏会话来注销用户,从技术上讲,您所要做的就是向您自己的网站发出信号,表明此特定会话可能不会用于让用户进入。

注销.php:

<?php
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php");
    $config = array();
    $config['appId'] = '2911111111146';
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a';
    $config['fileUpload'] = false;
    $facebook = new Facebook($config);
    $logouturl = $facebook->getLogoutUrl();
    $_SESSION['user_facebook_email'] = "";
    $_SESSION['ask_user_to_login'] = true;
    header("Location: showquestions.php");
?>

索引.php:

<?php
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php");

    $config = array();
    $config['appId'] = '2911111111146';
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a';
    $config['fileUpload'] = false;

    $facebook = new Facebook($config);
    $userId = $facebook->getUser();
    if ($_SESSION['ask_user_to_login'] == true || $userId == 0){
      $loginUrl = $facebook->getLoginUrl();
      $_SESSION['ask_user_to_login'] = false;
      echo "<button type='button' onClick=\"window.location='$loginUrl'\">" .
           "<img src='picture.gif' alt='Login with facebook'/>" .
           "</button>";
      exit;
    }
    else
    {
      $userInfo = $facebook->api('/' + $userId);
      session_cache_expire (150000);  //set the cache expire to 15000 minutes
      $_SESSION['user_facebook_email'] = $userInfo['email'];
      $_SESSION['facebook'] = $facebook;      
      header("Location: showquestions.php");
    }
    $userInfo = $facebook->api('/' + $userId);
    echo "Welcome" . $userInfo['email'];
?>

登录.php:

<?php
    session_start();        
    if (isset($_SESSION['user_facebook_email']) !== true || 
        $_SESSION['user_facebook_email'] == "")
    {
        header("Location: index.php");
        exit;
    }
?>

然后在您想要阻止没有登录用户访问的每个 php 文件中,将其放在顶部:

<?php
    require("log2.php");
?>

使用此代码,用户会自动登录,如果他们调用注销代码,站点将不会让他们进入,直到他们再次登录。

于 2013-09-19T18:24:49.200 回答
0

您需要调用session_start()将使用会话的所有页面。

要将某人从会话中注销(即清除它),您可以使用session_destroy().

最后,header('example.com');实际上不会做任何事情,您是否打算执行重定向?如果是这样,您应该使用 `header('Location: http://example.com/ ');

编辑:对不起,我没有正确阅读,第二个代码片段是什么?那是你的 logout.php 页面吗?

据我所知,当您调用 Facebook API 时getLogoutUrl(),您应该在用户单击链接时将其发送给他们,而不是您自己的logout.php.

于 2012-07-14T12:24:38.790 回答
0

从 Facebook 注销用户可能很困难。这对我有用

// Get an instance of the Facebook class
$facebook = $this->facebook_instance_factory();
// Destroy the session so that no Facebook data is held
$facebook->destroySession();
$logout = $facebook->getLogoutUrl();
$facebook->setAccessToken('');
// Redirect the user to the logout url, facebook will redirect him to our page
wp_redirect( $logout );
于 2012-07-14T12:29:13.443 回答
0

回答

  $_SESSION['fb_(your_APP_ID)_access_token'] = '' ;

当登录会话初始化时,似乎如果我们将这些session变量中的任何一个设置为空,它会破坏登录功能,并要求用户再次登录

于 2012-07-15T01:27:11.230 回答