我的網站使用Facebook的連接用於登錄,我的服務器上的會話有效期是3600Facebook的自動重新登錄
我使用Client-Side Flow(JavaScript)的重定向到login.php中,和的login.php檢索cookie(由javascript設置)以獲取訪問令牌。
但是,如果用戶閒置超過3600秒,則服務器上的會話過期。 ($ _SESSION ['uid']不存在。) 我的login.php如何檢查用戶是否已經登錄Facebook(不是我的應用)?
我正在使用的解決方案是將用戶重定向到我的JavaScript頁面,並且「onStatus函數」將被facebook自動觸發。
我正在尋找一個解決方案,可以使用login.php來自動重新登錄我的網站,如果他或她已經登錄Facebook(無需重定向到JavaScript頁面)。有可能嗎?
的javascript:(用於登錄)
FB.init({appId: 'MY_APP_ID', status: true, cookie: true, xfbml: true});
FB.getLoginStatus(function(response) {
onStatus(response);
FB.Event.subscribe('auth.statusChange', onStatus);
FB.Event.subscribe('auth.login', reloadPage);
});
function onStatus(response) {
if (response.session) {
window.location.href = '/login?fb';
}
}
function reloadPage(response) {
if (response.session) {
window.location.href = '/login?fb';
}
}
PHP:
function get_facebook_cookie($app_id, $app_secret) {
$args = array();
if(!isset($_COOKIE['fbs_' . $app_id]))
return false;
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
ksort($args);
$payload = '';
foreach ($args as $key => $value) {
if ($key != 'sig') {
$payload .= $key . '=' . $value;
}
}
if (md5($payload . $app_secret) != $args['sig']) {
return false;
}
return $args;
}
$cookie = get_facebook_cookie(MY_APP_ID, MY_APP_SECRET);
if($cookie){
if($result = @file_get_contents("https://graph.facebook.com/me/?access_token=".$cookie['access_token'])){
$result = json_decode($result, true);
$_SESSION['uid'] = $result['id'];
}
並將參數傳遞到iframe中,您可以在這裏看看http://stackoverflow.com/questions/1663396/passing-url-parameters-to-iframe-using-jquery-or-javascript – Uri 2011-09-19 07:36:38