Мой сайт использует Facebook для входа в систему, а срок службы сеанса на моем сервере - 3600.
Я использую Клиентский поток (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'];
}