【问题标题】:How to log out of facebook如何退出脸书
【发布时间】:2011-08-24 18:22:09
【问题描述】:

我有以下脚本,它允许用户使用他们的 facebook 帐户登录我的网站,请求适当的权限,如果被接受,它将在墙上发布一条消息:

<?php
    require 'facebook.php';

    $facebook = new Facebook(array(
        'appId'  => 'removed for security reasons',
    'secret' => 'removed for security reasons',
        'cookie' => true,
    ));

    $session = $facebook->getSession();

    if ($session) {

        if (isset($_GET[id])) {
            $post = $facebook->api("/" . $_GET['id'] . "/feed", "POST",  array('message' => 'Hello!'));
            echo 'A message has been posted on your friends wall';

        } else {

            $friends = $facebook->api('/me/friends');

            foreach ($friends as $key=>$value) {
                echo 'You have ' . count($value) . ' friends<br />';

                foreach ($value as $fkey=>$fvalue) {
                    echo 'friend id = ' . $fvalue[id] . ' - friend name = ' . $fvalue[name] . ' - <a href="/stage0.php?id=' . $fvalue[id] . '">post message</a><br />';
                }
            }
        }

    } else {

        $loginUrl = $facebook->getLoginUrl(array(
            'req_perms' => 'publish_stream',
            'next' => 'http://'.$_SERVER['SERVER_NAME'].'/stage0.php',
            'cancel_url' => 'http://'.$_SERVER['SERVER_NAME'].'/cancel.php',
        ));

        header('Location: '.$loginUrl);
    }
?>

然后我有以下脚本来注销用户:

<?php
    error_reporting( E_ALL | E_STRICT );
    ini_set('display_errors', 1);
?>

<?php
    session_start();
?>

<html>
    <head>
        <title></title>

        <?php
            $_SESSION = array(); 
            session_destroy();
        ?>

        <meta http-equiv="refresh" content="0;index.php">
    </head>

    <body>
        <h1>logout</h1>
    </body>
</html>

这会清除我创建的会话,但根本不会将它们从 facebook 中注销。如何清除我创建的会话并将它们从 facebook 中注销?

【问题讨论】:

  • 一旦你进去,facebook就永远不会让你出去:-P
  • @Guy Fawkes -- 欢迎来到酒店 Facebook。
  • @Spudley 哈哈,它让我想起了关于 facebook 的那部燕麦片卡通片,搞笑:-)

标签: php facebook facebook-graph-api facebook-php-sdk


【解决方案1】:

从您的应用程序和 Facebook 中注销用户的推荐方法是调用 javascript SDK 的注销功能。

<a href="/auth/logout" onclick="FB.logout();">logout</a>

检查:http://developers.facebook.com/docs/reference/javascript/FB.logout/

【讨论】:

  • 如何在服务器端执行此操作。我通过服务器端登录,所以从服务器端注销对于我的应用程序来说是理想的。
  • 你必须两者都做,这就是为什么我让 href /auth/logout,它在我的服务器端,然后我可以做任何我想做的事,当我在那里接到电话时;)功能主要针对客户端
  • 能否请您提供有关 /auth/logout 的更多信息,因为我不想做这个客户端,我想做这个服务器端。
  • 我只是删除会话,服务器端,因为我主要使用zend,我做了类似的事情:Zend_Registry::get('auth')->clearIdentity() ...跨度>
【解决方案2】:
/* Use access token i.e. $_SESSION['facebookAccessToken']*/

function logoutUser($sessionKey)
{
    include_once 'facebook.php';
    $facebook = new Facebook( array('appId'=>FACEBOOK_APP_ID , 'secret'=>FACEBOOK_APP_SEC , 'cookie' => true));
    $logoutUrl = $facebook->getLogoutUrl(array('next' => BASE_URL , 'session_key' => $sessionKey));
    return $logoutUrl;
}

$access_array = explode('|' , $_SESSION['facebookAccessToken']);

$sessionKey = $access_array[1];

$redirectUrl = logoutUser($sessionKey);

header('Location: '.$redirectUrl );

【讨论】:

    【解决方案3】:

    将其用作您的注销 URL:

    &lt;a href="?action=logout"&gt;Logout&lt;/a&gt;

    这是你的代码:

    if(isset($_GET['action']) && $_GET['action'] === 'logout'){
        $facebook->destroySession();
    }
    

    这将使用户退出应用程序,而不是 facebook 本身,完全退出 facebook,不建议这样做,因为它会使一些用户感到困扰,将其添加到您的会话中 if($session) {

    $logoutUrl = $facebook->getLogoutUrl();
    

    然后为您的注销 URL,使用:

    <a href="' . $logoutUrl . '">Logout</a>
    

    【讨论】:

    • 平台策略实际上要求将用户从 Facebook 注销。不是说它有道理,但它就在那里。 #6@developers.facebook.com/policy
    • 啊,哇,感谢您指出这一点!就像你说的,这没有意义,如果我在使用 facebook 时退出应用程序/网站,我想保持登录 facebook,想知道你是否可以选择退出应用程序和facebook,将对此进行研究,但感谢您指出。
    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多