帮助更好地了解Facebook oauth代码

时间:2010-09-17 17:08:41

标签: php facebook oauth

我是Facebook开发和PHP的新手。我今天刚开始,我想知道以下代码片段的作用,

<?php

define('FACEBOOK_APP_ID', '123423');  
define('FACEBOOK_SECRET', '3eesewee3e');  

function get_facebook_cookie($app_id, $application_secret) {  
  $args = array();  
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); //Why??  
  ksort($args);  
  $payload = '';  
  foreach ($args as $key => $value) {        
    if ($key != 'sig') {//Why checking not equals to 'sig'  
      $payload .= $key . '=' . $value;  
    }  
  }  
  if (md5($payload . $application_secret) != $args['sig']) {//why is this checking  
    return null;  
  }  
  return $args;  
}  

$cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET);  

?>

我理解PHP函数及其用法。我想知道为什么这样做?

我想知道带注释的行的解释//为什么。我有点不确定在这次沟通中来回走动,为什么我们要做这些检查等。

感谢您的时间。

此致 阿布舍克巴克

1 个答案:

答案 0 :(得分:0)

第一个查询行正在使用Cookie中的键/值填充$args

第二个查询行位于$args键的循环中。它忽略了'sig',因为这是一个签名,不会被哈希。

第三个查询行检查有效负载的散列是否与签名匹配。

基本上,这段代码正在做的是解析cookie,将键排序为标准顺序,获取排序键的哈希值并将该哈希值与签名进行比较。如果签名与散列不匹配,则cookie已被篡改。

$args数组需要使用标准排序函数进行排序,因为数据的顺序会影响散列值。