2013-02-18 97 views
0

这个例子实际上是从Facebook复制的。用PHP SDK登出Facebook?

当我访问页面时,行为很奇怪: “login”第一次似乎很好。然后它显示'注销'链接。但是当我点击它 我再次获得完全相同的屏幕,再次点击“注销”链接。刷新也会到达相同的屏幕 。

使用Facebook进行检查,但是,它会将我注销。

如果我关闭浏览器并重新打开它,现在“登录”已正确显示。

<?php 

require 'facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'xxxxxxxxxxxxxxx', 
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

if ($user) { 
    $params = array('next' => 'http://xxxxxxxxxx'); 
    $logoutUrl = $facebook->getLogoutUrl($params); 
} else { 
    $params = array('redirect_uri' => 'http://xxxxxxxxxx'); 
    $loginUrl = $facebook->getLoginUrl($params); 
} 

?> 

<!doctype html> 
<html> 
    <head></head> 
    <body> 

    <?php if ($user): ?> 
     <a href="<?php echo $logoutUrl; ?>">Logout</a> 
    <?php else: ?> 
     <a href="<?php echo $loginUrl; ?>">Login with Facebook</a> 
    <?php endif ?> 

    <?php if ($user): ?> 
     Picture = <img src="https://graph.facebook.com/<?php echo $user; ?>/picture"> 
     User Object = <?php print_r($user_profile); ?> 
    <?php else: ?> 
     User is not Connected. 
    <?php endif ?> 

    </body> 
</html> 
+0

清除所有Cookie,然后在注销的点击。 – gaurav 2013-02-18 19:37:49

+0

是的 - 它似乎有这样的解决方案在这里: http://stackoverflow.com/questions/10366366/facebook-php-sdk-will-not-logout-properly – 2013-02-18 20:57:43

回答

1
$past = time() - 3600; 
foreach ($_COOKIE as $key => $value) 
{ 
    setcookie($key, $value, $past, '/'); 
} 

你可以试试这个代码。它只会销毁从您的网站保存的所有Cookie。 它为我工作..!

+0

一直在尝试很多其他解决方案,但这样做该技巧马上。 – Dymond 2013-06-14 18:15:01

0

创建一个文件logout.php

<?php 
session_start();   //start session 
$_SESSION = array(); //clear session array 
session_destroy();  //destroy session 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Log Out</title> 
</head> 

<body> 
<p>You have successfully logged out!</p> 
<p>Return to the <a href="....index.php">Home</a> page</p> 

</body> 
</html> 

,改变你的代码,你检查用户状态

if ($user) { 
    $params = array('next' => 'http://....../logout.php'); 
    $logoutUrl = $facebook->getLogoutUrl($params); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

使用$ logoutUrl用于注销用户。

<?php if ($user): ?> 
<?php echo "Welcome, ".$me['first_name']. " " .$me['last_name'] ." <br />"; 
     echo "Id: " . $me['id'] ." <br />"; ?> 

<a href="<?php echo $logoutUrl; ?>"> Logout </a> <br /> 

<?php else: ?> 
    <a href="<?php echo $loginUrl; ?>"> 

    <img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif"> </a> 
<?php endif ?> 

希望它会正常工作