【问题标题】:Logout with Facebook PHP SDK v5使用 Facebook PHP SDK v5 注销
【发布时间】:2016-12-30 05:39:39
【问题描述】:

我正在使用 Facebook SDK v5,我可以使用此脚本登录,登录时我创建了一个 cookie,如果我尝试通过清除该 cookie 来注销是不可能的!

这是我的登录脚本

<?php
require_once __DIR__ . '/src/Facebook/autoload.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/fbloging/helper/helper.php';
$fb = new Facebook\Facebook([
'app_id' => '__MY_APP_ID__',
'app_secret' => '__MY_APP_SECRET__',
'default_graph_version' => 'v2.5'
]);

$helper = $fb->getJavaScriptHelper();

try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
}

if (isset($accessToken)) {
$fb->setDefaultAccessToken($accessToken);

try {

$requestProfile = $fb->get("/me?fields=name,email,id,picture.width(800).height(800),cover.width(300).height(175)");
$profile = $requestProfile->getGraphNode()->asArray();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
}


$query = "SELECT * FROM `users` WHERE `user_id`='".$profile['id']."' AND `email`='".$profile['email']."'";
$result = $db->query($query);
$fr = mysqli_fetch_assoc($result);
if(mysqli_num_rows($result)>0){
if($fr['profile']==1){
set_user_cookie($profile['name'],$profile['id'],$profile['picture']['url'],$profile['email'],$profile['cover']['source']);
header('location: ../home.php');
}else{
set_user_cookie($profile['name'],$profile['id'],$profile['picture']['url'],$profile['email'],$profile['cover']['source']);
header('location: ../complete-profile.php');
}

}else{
$name = $profile['name'];
$id = $profile['id'];
$email = $profile['email'];
$result = $db->query("INSERT INTO `users`(`user_id`, `email`, `user_name`) VALUES ('$id','$email','$name')");
if($result){
set_user_cookie($name,$id,$profile['picture']['url'],$email,$profile['cover']['source']);
header('location: ../complete-profile.php');
}else{
echo 'Something Went Wrong';
}
}

// setcookie('user',$profile['name']."~".$profile['id']."~".$profile['picture']['url']."~".$profile['email'], time()+3600+2,"/");
// header('location: ../');
exit;
} else {
echo "Unauthorized access!!!";
exit;
}

这是设置COOKIE的功能

helper.php

// Set cookie
function set_user_cookie($name, $id, $pro, $email,$cover){
$string=$name."~".$id."~".$pro."~".$email."~".$cover;
setcookie('udet',$string, time()+3600*2*24,"/");
}

我正在使用 Cookie 来存储一些用户数据,以便在他们登录到文件时显示这些详细信息。当 COOKIE 设置为这样时,我需要用户可以访问该页面

complete-profile.php

require_once 'helper/helper.php';
if (isset($_COOKIE['udet'])) {
$user = explode("~",$_COOKIE['udet']);
$name =  $user[0];
$id = $user[1];
$pic = $user[2];
$email = $user[3];
$cover = $user[4];
}else{
header('Location : index.php');
}

我设置了一个注销链接,在那个注销文件中我只是像这样删除那个cookie

logout.php

<?php
unset($_COOKIE['udet']);
header('Location: index.php')
?>

但删除后我也可以访问这些用户数据并且该 Facebook 帐户没有注销!

我搜索了这个答案,但在网上没有找到任何合适的答案!

当用户点击注销 URL 时我需要注销用户(Logout URL access logout.php)

请帮帮我

【问题讨论】:

    标签: php facebook cookies login logout


    【解决方案1】:

    大约一年前,我试图实现和你一样的目标。

    但如果我没记错的话,这不是你可以控制的,只要用户登录了 facebook,他就会在你的页面上“登录”。

    您可以让他们进入登录页面,但由于他们在 facebook 上登录,因此 facebook 身份验证仍会识别他们。

    我认为有一种方法可以完全注销他们,但随后他们也会从 facebook 注销,我认为这不会让你变得受欢迎。

    编辑:我查看了 Facebook 的 JavaScript SDK 中的注销方法,并引用了

    方法 FB.logout() 使用户退出您的站点,在某些情况下,还退出 Facebook。

    https://developers.facebook.com/docs/reference/javascript/FB.logout

    【讨论】:

    • 所以,如果有人想从网站注销,他也需要从 Facebook 注销,嗯,这不是个好主意
    • 我在 php graph sdk 中也注意到了这种行为。那我们怎么才能只从网站登出,而不是从 facebook 登出呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2013-07-29
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多