facebook身份验证/登录麻烦

时间:2010-05-13 10:17:58

标签: php 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;

这非常难看(在我看来)但是它有效....但是......用户仍然没有登录...因为我没有创建或检索任何会话变量来确认用户登录到Facebook ...

这意味着在完成身份验证后,仍然需要登录....

首先:有没有更好的方法使用PHP来做我上面做的事情? 第二:如何设置/获取会话变量/ cookie,以确保用户不必单击登录

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

好的回答你是第一个问题“有没有更好的方法使用php做我上面做的事情?”

基本上我认为这是一个意见问题,因为有很多选择。这是您感觉舒适的用途以及您的应用目的。

就个人而言,(我说这不是为了给你施加压力,而是提供一个选项)我使用javascript登录,它是来自facebook,它是一个漂亮的工匠脚本,干净,快速等可以找到here(它是在这个阶段我道歉,如果我的信息已经过时,因为我刚刚注意到Facebook已更新该页面的第二个lol!)好的部分是它将auth令牌保存为变量(您可以将其更改为会话如果你愿意的话,那就完成了,因为你只是把它放到你所展示的大多数网址的末尾。

(虽然查看新的更新网站,但代码在布局上看起来更复杂'所以不要害怕请求帮助,我会给你原始代码)

问题2:你如何获得/设置会话变量...... 好吧有很多东西和方法等等...但是我会保留基本/简单版本并添加你应该记录的笔记,以获得更高级的选项。 首先,在任何有会话变量的页面的开头,你应该从

开始

session_start();

然后当你想添加一个会话变量时,这只是一个简单的问题

$_SESSION['session_variable_name'] = $variable;

(是的,我知道你想做整个foo和bar的事情,但他们惹恼我:D)。 就是这样!如果你想“退出”,你可以

session_destroy();

它将停止携带会话详细信息。 现在会议记录:

  • 除非另有说明,否则会话通常会作为文件保存在您的服务器上!这可能违反您所做的任何隐私声明!

  • 会话通常无法在子域名(www.website.com - &gt; website.com)中存在,并且实际上并不建议$ _POST数据。此外,有些人遇到从http://到https://的会话数据问题。

  • 会话不会永远存在,它们基本上会将会话ID留在客户端浏览器的cookie中供以后参考。

  • 当您有多个服务器进行流量权重分配时,您可以再次丢失会话,因为它不会通过服务器传递。您可以将它们保存在所有服务器都可以访问的位置,或者具有适合memcache等会话的服务器。

而且我认为这是你需要了解的最多会话:P

我希望有所帮助!

乔恩

相关问题