Session key invalid or no longer valid

2009/06/11
~ 阿亮 ~

在實做 facebook AP 時,由於一些 AJAX 的話,用 iframe 來做,比較方便,但在於 iframe 要去調 Server 端時,若又要用 facebook api 來調用相關使用者時,會有 Session 不符合的問題。

即會有 "Session key invalid or no longer valid" 的訊息。

用 facebook 去調用 Iframe 的程式,facebook 端會丟 $_POST['fb_sig_session_key'] 來做簡單的驗證機制,一般如下述所列的做法。

if (isset($_REQUEST['fb_sig_session_key'])) {
        $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];

但這段會有上述的錯誤情形。

根據此頁的做法 ,要用下述的做法

$iframeSessionKeyName = $CONFIG['facebook']['apiKey'] . '_session_key';
if (isset($_REQUEST[$iframeSessionKeyName])) {
    $_SESSION['fb_sig_session_key'] = $_REQUEST[$iframeSessionKeyName];
}
else if (isset($_REQUEST['fb_sig_session_key'])) {
    $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];

真是找好久的解法啊 

 

◎後來還是有時會遇到 session key invalid 的問題,可以試試下述方法,即在於 getInfo 遇到 exception  時,將 session 清除,重新 login.

try
    {
        $userLocale = $facebook->api_client->users_getInfo($fb_sig_user, 'locale');
    }
    catch (Exception $e)
    {
        // $facebook->expire_session();
        $facebook->set_user(null, null);
        $facebook->redirect($facebook->get_login_url(null,''));
    }

雖然,有的文章說要用 expire_session 的方法,但此 method 還是會讀 session 而無效。

加入書籤:
  • Digg
  • del.icio.us
  • Hemidemi
  • MyShare
  • Technorati
  • Haohao
  • MisterWong
  • email
  • Facebook
  • MySpace
  • Live
  • Print
  • Google Bookmarks
  • PDF
  • Yahoo! Bookmarks

相關文章

  • No Related Post

4 Responses to “Session key invalid or no longer valid”

歡迎留言

敝站會審核留言的適宜性,您的留言可能會較晚發佈,而且小弟保留刪除的權利!!

以下圖像請用滑鼠「拖曳」到編輯區即可用