Мой веб-сайт использует 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'];
}