9

を使用facebookして Web サイトにログインしています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

次のパラメータにサイトのURLを指定し、セッションを破棄することで、次のようにサイトおよびFacebookからログアウトできます。

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

また、それらをWebサイトからログアウトし、Webサイトがユーザーを自動的に記憶してすぐに再ログインしないようにする必要があります。

ユーザーに自動ログインするコードを無効にして、ログアウトを再試行してください。セッションを破棄しても、記憶されているユーザーに対してサイトがまったく新しい有効なセッションを作成することを妨げることはありません。

于 2012-07-18T08:18:02.430 に答える
1

Facebookでユーザーをログインおよびログアウトさせる私のWebサイトのPHPログアウトコードは次のとおりです。ユーザーをログアウトするためにセッションを破棄する必要はありません。技術的に必要なのは、この特定のセッションがユーザーのログインに使用されない可能性があることを独自の Web サイトに通知することだけです。

logout.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");
?>

index.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'];
?>

login.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/ ');を使用する必要があります。

編集:申し訳ありませんが、これを正しく読んでいませんでした。2番目のコードスニペットは何ですか?それはあなたのlogout.phpページですか?

私がFacebookAPIを知っている限り、あなたが電話をかけているとき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ログインセッションが初期化されると、これらの変数のいずれかを null に設定すると、ログイン機能が壊れ、ユーザーに再度ログインするように求められます。

于 2012-07-15T01:27:11.230 に答える