Facebook登录-使会话持续更长时间


Facebook login - Make sessions last longer

我使用loginFb来登录我的网站。大约30分钟后,用户必须再次登录。我能做些什么来延长用户的会话或延长facebook令牌…不知道该怎么做。

public function loginFb($facebookId)
    {
        $result = $this->db->mysqli->prepare("SELECT id, fb_id
        FROM users WHERE fb_id = ?");
        $result->bind_param('i', $facebookId);
        $result->execute();
        $result->store_result();
        $result->bind_result($id, $facebookId);
        if($result->num_rows > 0)
        {
                $soon = array();
                while ($result->fetch())
                {
                        $soon['id'] = $id;
                        $soon['fb_id'] = $facebookId;
                }
                $soonSess = serialize($soon);
                $_SESSION["user"] = $soonSess;
                $_SESSION["login_time"] = time();
                $_SESSION["logged_in"] = 1;
                $result->close();
                return true;
        }else{
                return false;
        }
    }

我还对会话使用以下规则:

ini_set('display_errors', 'on');
ini_set('session.cookie_httponly', 1);
//ini_set('session.use_only_cookies',1);
ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);
ini_set('session.gc_probability', 0);
ini_set('session.gc_divisor', 1000);

当用户注销他们的Facebook帐户时,会话是否会过期?或者当使用Facebook登录时,延长会话生命周期的最佳实践是什么?

编辑* *

//initialize Facebook
FacebookSession::setDefaultApplication($app_id, $app_secret);
$helper = new FAcebookRedirectLoginHelper($redirect_url);
try {
    $session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
    // When Facebook returns an error
    die(" Error : " . $ex->getMessage());
} catch('Exception $ex) {
    // When validation fails or other local issues
    die(" Error : " . $ex->getMessage());
}
//check if facebook session exists
if(isset($_SESSION['fb_token']))
{
    $session = new FacebookSession($_SESSION['fb_token']);
}
if(isset($session))
{
    $_SESSION['fb_token'] = $session->getToken();
    try
    {
        $user = (new FacebookRequest(
            $session, 'GET', '/me'
        ))->execute()->getGraphObject(GraphUser::className())->asArray();
    } catch(FacebookRequestException $e) {
    }
    $name = $user['name'];
    $firstName = $user['first_name'];
    $lastName = $user['last_name'];
    $fbId = $user['id'];
    $fbEmail = $user['email'];
}

可以通过调用

将短期用户访问令牌(有效期2小时)扩展为长期用户访问令牌(有效期60天)
GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token} 

  • https://developers.facebook.com/docs/facebook-login/access-tokens扩展