facebook php sdk
を使用して自分のWebサイトにfacebook
ログインを使用しています。
私が気付いたのは、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を使用してユーザーをログアウトするにはどうすればよいですか?
次のパラメータにサイトの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サイトがユーザーを自動的に記憶してすぐに再ログインしないようにする必要があります。
ユーザーに自動ログインするコードを無効にして、再度ログアウトしてください。セッションを破棄しても、記憶されているユーザーに対してサイトがまったく新しい有効なセッションを作成することを妨げることはありません。
これは、Facebookでユーザーをログインおよびログアウトする私のWebサイトのPHPログアウトコードです。ユーザーをログアウトするためにセッションを破棄する必要はありません。技術的に行う必要があるのは、シグナルを送信することだけです。この特定のセッションを使用してユーザーを参加させることはできません。
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");
?>
このコードを使用すると、ユーザーは自動的にログインし、ログアウトコードを呼び出すと、サイトはユーザーが再度ログインするまでログインを許可しません。
セッションが使用されるすべてのページでsession_start()
を呼び出す必要があります。
誰かをセッションからログアウトする(つまり、クリアする)には、session_destroy()
を使用できます。
最後に、header('example.com');
は実際には何もしませんが、リダイレクトを実行するつもりですか?その場合は、 `header( 'Location: http://example.com/ ');を使用する必要があります。
編集:申し訳ありませんが、これを正しく読んでいませんでした。2番目のコードスニペットは何ですか?それはあなたのlogout.phpページですか?
Facebook APIについて私が知っている限り、getLogoutUrl()
を呼び出すときは、ユーザーが自分のlogout.php
ではなく、リンクをクリックしたときに送信する必要があります。
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 );
[〜#〜] answer [〜#〜]
$_SESSION['fb_(your_APP_ID)_access_token'] = '' ;
ログインセッションが初期化されると、これらのsession
変数のいずれかをnullに設定すると、ログイン機能が中断され、ユーザーに再度ログインするように求められるようです。