2010-05-13 169 views
2

我使用PHP已经安装Facebook的身份验证,它是这样的 首先获得授权在这里: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做我上面那样一个更好的办法? 第二:如何设置/获取会话变量/饼干是确保不必须点击用户登录

感谢您的帮助

回答

3

好回答你第一个问题:“有没有用更好的方法PHP做我以上做的?“

从本质上讲,我认为这是一个意见问题,因为有太多的选择。这就是你对你的应用感到满意和你有什么目的。

个人而言,(我说这不是压力你,而是提供一个选项)我使用javascript登录,它来自Facebook,它是一个漂亮的crafter脚本,干净,快速等等,可以找到here(这是在这个阶段我很抱歉如果我的信息过时了,因为我刚刚注意到这第二次facebook已更新该页面大声笑!)最好的部分是它将auth令牌保存为变量(如果您愿意,您可以更改为会话),并且基本上完成了这个任务,就像你刚刚展示的大多数URL一样。

(虽然通过新更新的网站寻找代码看起来稍微更“复杂”,在它的布局,所以不要害怕问寻求帮助,我会给予你的原码)

问题2:你如何获得/设置会话变量... 那么有很多事情和方式等等..但是,我会保持基本/简单版本,并添加注释,你应该在你的脑海中存档以便更高级选项。 首先,在与它的会话varible任何一页开始你应该

session_start();

,然后当你想添加一个会话varible开始它是简单地

$_SESSION['session_variable_name'] = $variable;

问题

(是的,我知道你想做整个foo和酒吧的东西,但他们烦我:D)。 就是这样!如果您想为“注销”,您可

session_destroy();

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

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

  • 会话通常不会在子域名(www.website.com - > website.com)中生存,并且不建议$ _POST数据。此外,一些人遇到问题从http://到https://与会话数据。

  • 会话不会永远持续下去,它们实际上会将会话ID留在客户端浏览器的cookie中供以后参考。

  • 当您有多个服务器进行流量权重分配时,您可以再次丢失会话,因为它不会跨服务器传递。您可以将它们保存在所有服务器都可以访问的位置,或者有一个服务器来满足像memcache这样的会话。

而且我认为这是你永远需要了解会议的最:P

我希望帮助!

Jon