当他们使用通过 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 连接时,无法从站点注销用户的主要内容,如果未能解决你的问题,请参考以下文章

Spark 独立集群 - 从站未连接到主站

无法使用 .bat 文件从 jenkins 中的从站连接到主站

当***连接时,用户将能够进入应用程序,如果他们没有连接,他们将无法进入。我怎么做?

Strophe 无法通过 BOSH 服务器连接到 Facebook

Facebook SDK 注销问题

当用户退出我的 iOS 应用程序时,下次他们尝试使用 Facebook 登录时,他们应该必须重新输入他们的登录凭据