我的网站使用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