2010-05-13 166 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