2011-05-05 65 views
1

我如何在我的Facebook應用程序維護會話Cookie? 目前我所有的網頁中,有下面的代碼:Facebook的PHP SDK的會話邏輯

$facebook = new Facebook(array(
    'appId' => 'myid', 
    'secret' => 'mysecret', 
    'cookie' => true, 
)); 


$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

// login or logout url will be needed depending on current user state. 
if ($me) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(array('canvas' => 1, 
              'fbconnect' => 0, 
              'req_perms' => 'publish_stream,email', 
              'next' => 'register.php', 
              'cancel_url' => 'http://www.facebook.com/apps/application.php?id=MYAPPID&perms')); 
} 

if (!$me){ print("<html><head>"); 
print("<script type=\"text/javascript\">function redirect(){ top.location.href = \""); 

print($loginUrl); 
print("\"; }</script></head>"); 
print("<body onload=\"redirect();\">Please wait...</body></html>"); exit(); } 

這是錯誤的,因爲我明白,每次用戶導航到不同的頁面在我的畫布我得到一個新的會話。我需要使用請求嗎?如果是的話,我該如何做到這一點?

回答

3

您正在使用PHP SDK來獲取用戶會話,這沒關係。 PHP SDK非常聰明,可以在持有會話信息的用戶身上設置和使用Cookie,因此,在每次加載頁面時,您都不會從Facebook獲取任何新的內容。你確實需要在每個頁面上安裝重定向,以防萬一你的用戶會話超時,或者用戶卸載你的應用程序中途使用,或者直接鏈接到你的應用程序的頁面,而不是安裝的用戶。

爲了讓代碼更清晰一些,您可以移動所有代碼來獲取會話&將安裝從用戶捕獲到單個腳本,並將其包含在應用程序中每個頁面的頂部。然後你就沒有那麼多的東西了,你可以在需要的時候輕鬆地改變/調整它。

編輯:如果您的用戶每次瀏覽到不同的網頁應用程序中的時間失去了會話,用戶的瀏覽器可能會阻止該FB PHP SDK的設置,因爲它是iframe中的cookie。您可能還需要在應用程序中設置P3P策略標頭,並且這通常可以解決該問題。

<?php 
header('P3P: CP="CAO PSA OUR"'); 
+0

但是當他們瀏覽到不​​同的頁面 – Tom 2011-05-05 12:54:11

+0

增加了更多的我的答案,這可能幫助(用戶丟失會話: – 2011-05-05 13:00:46

+0

感謝在P3P策略標題的信息這已經爲不必要的壓力一天造成的我們。 – 2011-11-17 05:30:12