1

我正在网站上工作,我想在其中将 facebook 登录与我的网站登录系统集成。我已经在代码中集成了 facebook-php-sdk。登录功能工作正常。以下是我遇到的问题...

  1. 注销并单击登录后,Facebook 登录屏幕未打开。
  2. 注销并刷新页面后,登录详细信息将再次显示。登录按钮消失。
  3. 如果以上两点都解决了,那么如何通过网站维护登录会话?

对于以上 2 点,我使用了以下代码。

    require 'src/facebook.php';

    $facebook = new Facebook(array(
      'appId'  => YOUR_APP_ID,
      'secret' => SECRET_KEY,
    ));

    session_start();



    if($_REQUEST['msg'] == 'logout'){
        setcookie('fbsr_'.$facebook->getAppId(), '', (time() - 3600), '/', 'domain.com');
        $sts = $facebook->destroySession();         
        session_destroy();
        header("Location: index.php");
        //echo '<meta http-equiv="refresh" content="2;url=index.php">';
    } 

    $userId = $facebook->getUser();
    if ($userId && !isset($_SESSION['fbdata'])) {
        $_SESSION['fbdata'] = array("userid" => $userId);       
    }

<?php if ($userId) {
        $userInfo = $facebook->api('/' + $userId); ?>
        Welcome <?= $userInfo['name'] ?>
    <?php } else { ?>
        <div id="fb-root"></div>
        <fb:login-button></fb:login-button>
    <?php } ?>
        <script type="text/javascript">
            window.fbAsyncInit = function() {
                FB.init({
                    appId      : '<?= YOUR_APP_ID ?>',
                    status     : true, 
                    cookie     : true,
                    xfbml      : true,
                    oauth      : true,
                });

                FB.Event.subscribe('auth.login', function(response) {
                    //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>
        <br />
        <br />
        <a href="<?php echo $_SERVER['PHP_SELF']."?msg=logout"; ?>">Logout</a>
4

1 回答 1

2

我在下面的问题中找到了答案。1.登出并点击登录后,facebook登录屏幕未打开。

Facebook cookie 没有被删除,或者我们可以说没有从 starage 中删除。为此,我在 javascript 下面使用了这个

    
    功能 removeCookie(名称,路径,域){

        如果(getCookie(名称))

        {

            document.cookie = name + '=' + ( ( path ) ? ';path=' + path : '') + ( ( domain ) ? ';domain=' + domain : '' ) + ';expires=Thu, 1970 年 1 月 1 日 00:00:01 GMT';

        }

    }

这个对我有用。

2.登出并刷新页面后,再次显示登录详情。登录按钮消失。

与上述问题相同的原因。

3.如果以上两点都解决了,那么如何保持整个网站的登录会话?

在会话中维护 fb id,当请求注销时删除 cookie 并销毁会话。

于 2012-12-21T10:27:25.103 回答