2011-01-30 45 views
3

更新和解決方案:事實證明,問題是基於我用於我的開發URL的重定向,導致瀏覽器將我的頁面設置的所有Cookie都視爲第三方Cookie。 Facebook JS API會話cookie是而不是設置爲第三方cookie。Facebook API和Safari

我正在使用Facebook身份驗證處理ASP.NET應用程序。爲此,我使用Microsofts Facebook SDK與Facebook的Javascript API結合使用。一切正常,除了Safari。旅行默認設置是不接受第三方cookie,其結果是:

  • 我可以通過Javascript訪問Facebook會話。
  • 我無法訪問Facebook會話服務器端,因爲cookie從未設置並從Safari發送。

這是我與Facebook的(JS)的客戶端代碼:

<div id="fb-root"></div>  
<fb:login-button>Login with Facebook</fb:login-button> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({ appId: 'myAppId', status: true, cookie: true, xfbml: true }); 
    FB.Event.subscribe('auth.login', function (response) { 
     if (response.session) { 
      window.location.reload(); //Results in eternal reload of page 
     } 
    }); 
</script> 

這是我用來獲取用戶ID服務器端(C#)代碼:

public string FacebookUserID 
{ 
    get 
    { 
     FacebookSettings settings = new FacebookSettings(); 
     settings.AppId = "myAppId"; 
     settings.AppSecret = "myAppSecret"; 
     FacebookApp app = new FacebookApp(settings); 
     Authorizer auth = new Authorizer(app); 

     return (auth.IsAuthorized()) ? app.Session.UserId : null; 
    } 
} 

我想我不是唯一一個遇到同樣問題的人,但我已經搜索了Facebook Developer論壇和這裏,但都沒有找到解決方案。這實際上更像是一個Safari問題,而不是Facebook特定的問題。

我一直在考慮通過GET/POST /我自己的cookie將用戶標識發回服務器,但這是一個醜陋的解決方案和潛在的安全問題。

任何想法?

+0

我不會說這是一個Safari問題,因爲任何人都可以設置他們的瀏覽器選擇不允許第三方cookie,它會打破功能(至少從你說的話)。您是否嘗試過更改其他瀏覽器中的第三方Cookie設置以查看事情是否仍然有效? – 2011-01-31 13:31:52

+1

這是正確的,問題主要與第三方Cookie有關,而Safari則因其默認設置禁止第三方Cookie。 – Herber 2011-01-31 16:07:43

回答

3

事實證明,問題是基於我用於我的開發URL的重定向,導致瀏覽器將我的頁面設置的所有Cookie都視爲第三方Cookie。 Facebook JS API會話cookie未設置爲第三方Cookie。