2010-05-13 6 views
2

У меня есть проверка подлинности facebook установки с помощью PHP, и это идет что-то вроде этого первого получения разрешения здесь:facebook аутентификации/Логин Проблема

https://graph.facebook.com/oauth/authorize?client_id=<?= $facebook_app_id ?>&redirect_uri=http://www.example.com/facebook/oauth/&scope=user_about_me,publish_stream 

затем получить доступ Токен здесь:

$url = "https://graph.facebook.com/oauth/access_token?client_id=".$facebook_app_id."&redirect_uri=http://www.example.com/facebook/oauth/&client_secret=".$facebook_secret."&code=".$code;" 

function get_string_between($string, $start, $end){ 
    $string = " ".$string; 
    $ini = strpos($string,$start); 
    if ($ini == 0) return ""; 
    $ini += strlen($start); 
    $len = strpos($string,$end,$ini) - $ini; 
    return substr($string,$ini,$len); 
} 


$access_token = get_string_between(file_get_contents($url), "access_token=", "&expires=");  

затем получение информации о пользователе:

$facebook_user = file_get_contents('https://graph.facebook.com/me?access_token='.$access_token); 

$facebook_id = json_decode($facebook_user)->id; 
$first_name = json_decode($facebook_user)->first_name; 
$last_name = json_decode($facebook_user)->last_name; 

Это довольно уродливое (i n мое мнение), но он работает .... как бы ... пользователь все еще не вошел в систему ... потому что я не создавал или не извлекал какие-либо переменные сеанса, чтобы подтвердить, что пользователь вошел в facebook ...

, что означает, что после получения аутентификации сделали использование до сих пор для входа ....

первый: есть лучший способ с использованием PHP, чтобы сделать то, что я сделал выше? второй: как установить/получить переменные сессии/куки, которые гарантируют, что пользователь оленьей коже должно нажать войти в

спасибо за вашу помощь

ответ

3

Ну, чтобы ответить вы первый вопрос «Есть ли лучший способ использования php делать то, что я сделал выше? "

По существу, я упал, что приходит к вопросу, так как есть много вариантов. Это то, с чем вам удобно, и какая у вас цель для вашего приложения.

Лично я (я говорю, что это не для того, чтобы надавить на вас, но предложить вариант). Я использую логин javascript, это из фейсбука, это красивый скрипт, который является чистым, быстрым и т. Д. И т. Д., Который можно найти here (именно на этом я извиняюсь, если моя информация устарела, поскольку я только что отметил эту секунду, что facebook обновил эту страницу lol!). Хорошая часть заключается в том, что она сохраняет токен аутентификации как переменную (которую вы можете изменить на сеанс, если хотите), и это делается по существу, поскольку вы просто применяете это к концу большинства URL-адресов, как вы показали.

(хотя просматривал новый обновленный сайт код выглядит чуть более «сложным» в его расположение, так что не бойтесь просить просить о помощи и я дам вам исходный код)

Вопрос 2: как вы получаете/устанавливаете сеансы varibles ... Ну, есть много вещей и способов и т. Д. И т. Д. ... однако я сохраню базовую/простую версию и добавлю заметки, которые вы должны отложить в своем уме для более продвинутых опции. Во-первых, в начале любой страницы с сеанса varible в нем вы должны начать с

session_start();

и тогда, когда вы хотите добавить сеанс varible это вопрос просто

$_SESSION['session_variable_name'] = $variable;

(да, я знаю, что вы думаете, что все это делаете, и они меня раздражают: D). И все! Если вы хотите «срубы из» вы можете

session_destroy();

, и он будет остановить проведение детали сессии. Сейчас сессия Примечания:

  • Если не указано иное, сеансы обычно сохраняются на сервере в виде файлов! Это может нарушить любые заявления о конфиденциальности, которые вы сделали!

  • Сессии часто не выходят за пределы субдоменов (www.website.com -> website.com), и на самом деле не рекомендуется использовать данные $ _POST. Кроме того, некоторые люди сталкиваются с проблемами, возникающими с http: // до https: // с данными сеанса.

  • Сессии не длится вечно, они по существу оставляют идентификатор сеанса в файле cookie в браузере клиента для последующего использования.

  • Когда у вас есть несколько серверов для распределения трафика, вы можете снова потерять сеанс, поскольку он не передается по серверам. Вы можете сохранить их в местоположении, доступном всем серверам, или иметь сервер, который обслуживает сеансы, такие как memcache.

И я думаю, что это самое вы будете когда-либо нужно знать о сессиях: P

Я надеюсь, что помог!

Jon

Смежные вопросы