我使用的是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?
您可以通过提供您的网站网址下一参数和销毁会话从您的网站,以及来自Facebook如下注销
$token = $facebook->getAccessToken();
$url = 'https://www.facebook.com/logout.php?next=' . YOUR_SITE_URL .
'&access_token='.$token;
session_destroy();
header('Location: '.$url);
您还可以登录他们走出你的网站,你必须避免你的网站从自动记住你的用户并重新登录他们马上。
禁用代码,自动记录你的用户,并尝试再次注销。 销毁会话不会阻止您的网站的用户记忆创建一个全新有效的会话。
这里是我的网站,使用户登录和退出与Facebook的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");
?>
有了这个代码,用户将自动登录,如果他们调用注销代码,该网站不会让他们,直到他们重新登录。
从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 );
你需要调用session_start()
在哪里会话将被用于所有页面。
要登录有人在会话(即清除它),你可以使用session_destroy()
最后, header('example.com');
实际上不会做任何事情,你打算进行重定向? 如果是这样,你应该使用'标题(“位置: http://example.com/ ”);
编辑:对不起,我没有正确读取这个,什么是第二代码片段? 那是你logout.php页?
据我所知与Facebook的API,当你调用getLogoutUrl()
这是你应该把你的用户,当他们点击链接,而不是你自己的logout.php
。
回答
$_SESSION['fb_(your_APP_ID)_access_token'] = '' ;
当登录会话初始化,看来,如果我们设置这些的session
变量设置为null它打破了日志功能,并要求用户重新登录