当他们使用通过 facebook 连接时,无法从站点注销用户
Posted
技术标签:
【中文标题】当他们使用通过 facebook 连接时,无法从站点注销用户【英文标题】:Cant logout users from site when they use connect via facebook 【发布时间】:2013-05-21 07:35:27 【问题描述】:好的,我编写了一个代码,将用户连接到我的数据库,然后我设置为该用户的登录名,如果电子邮件已经在数据库中,我只需登录用户...
问题是注销按钮不起作用..我试过了。
session_start();
session_destroy();
在注销时,但一旦被重定向到索引页面,(我认为是再次登录)
我怎样才能避免这种情况..
编辑:我不希望用户从 Facebook 注销。刚从我的网站登出
这是我的代码。
<?php
if ($userId)
//
// already logged? show some data
$userInfo = $facebook->api('/' + $userId);
if (isset($userInfo['email']))
include "facebookregister.php"; else echo "no hay permisos de facebook";
else
//
// use javaascript api to open dialogue and perform
// the facebook connect process by inserting the fb:login-button
?>
<div id="fb-root"></div>
<fb:login-button scope='email,user_birthday'></fb:login-button>
<?php
?>
<script>
window.fbAsyncInit = function()
FB.init(
appId : <?=YOUR_APP_ID?>,
status : true,
cookie : true,
xfbml : true,
oauth : true,
);
FB.Event.subscribe('auth.login', function(response)
// ------------------------------------------------------
// This is the callback if everything is ok
window.location.reload();
);
;
(function(d)
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) return;
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
(document));
</script>
还有注销。
function logout_action()
$srv_nms=BASE;
$srv_nms=str_replace("http://","",$srv_nms);
$srv_nms=str_replace("https://","",$srv_nms);
$srv_nms=str_replace("www.","",$srv_nms);
$srv_pats=$srv_nms;
$srv_nms_arr=explode("/",$srv_nms);
$srv_nms=$srv_nms_arr[0];
$srv_pats=str_replace($srv_nms."/","",$srv_pats);
setcookie(COOKIE_LOGINID,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_USERNAME,"",0,"/".$srv_pats,$srv_nms);
setcookie(COOKIE_PASSWORD,"",0,"/".$srv_pats,$srv_nms);
session_start();
session_destroy();
header("Location: ".$this->make_url("user/login/l"));
die;
【问题讨论】:
【参考方案1】:我想我会使用 cookie。注销后,设置一个 cookie 告诉您已请求注销。然后在主页上,在从 facebook API 获取数据之前,检查 cookie。显然,您必须在登录时覆盖或使 cookie 过期......但这应该可以为您解决。
【讨论】:
是的,脚本已经在使用 cookie setcookie(COOKIE_USERNAME,"",0,"/".$srv_pats,$srv_nms);问题是我不明白这个值..我也认为这个 COOKIE_USERNAME 是在其他地方定义的..我尝试了正常的设置,但它不起作用...我将搜索有关设置 cookie 的教程谢谢 你不必想太多。虽然不像“优雅”...不要担心已经在使用的cookie...为此特定目的制作一个新的。只需设置一个名为“fblogout”的cookie(例如)......并将值设置为“yes”或其他东西。然后你可以检查 $_COOKIE['fblogout']=='yes' 并绕过 facebook API。登录后,只需将该 cookie 的过期时间设置为“-1”,它就会消失(尽管我也会将该值设置为“否”作为备用预防措施)。【参考方案2】:在注销操作中,您将通过 session_destroy 注销,这将仅清除服务器中的会话,而不是 api。
所以您需要发出 $facebook->api 注销请求才能完全从 facebook 注销。 注意:请参阅 api 文档以获取注销请求。
【讨论】:
这正是我想要避免的......我不想从 facebook 注销用户,只是为了我的网站.. 但是这段代码创建了一种“循环”,他们总是再次登录当他们注销时...我可以将名称设置为 fb:login 之类的 name="" 或设置“登录”过程的条件。以上是关于当他们使用通过 facebook 连接时,无法从站点注销用户的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 .bat 文件从 jenkins 中的从站连接到主站
当***连接时,用户将能够进入应用程序,如果他们没有连接,他们将无法进入。我怎么做?