Facebook C#SDK - Iframe应用程序和Safari Cookie问题

时间:2011-01-31 12:08:28

标签: c# facebook cookies sdk safari

我正在为Facebook构建一个Iframe画布应用程序。我没有使用Javascript SDK。

这是我正在使用的代码,除了Safari之外,它适用于所有浏览器。

protected FacebookApp app;

受保护的CanvasAuthorizer cauth;

Response.AddHeader(“p3p”,“CP = \”IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT \“”);  app = new FacebookApp();         cauth = new CanvasAuthorizer(app);         if(!cauth.IsAuthorized())         {             myAuth auth = new myAuth();             myAuth.Authorize(app,Request,Response,perms);         }

    if (cauth.Authorize())
    {

//在这里做我的应用程序  }

public class myAuth
{
    public static void Authorize(FacebookApp fbApp, System.Web.HttpRequest request, System.Web.HttpResponse response, string perms)
    {
        Authorize(fbApp, request, response, perms, null);
    }

    public static void Authorize(FacebookApp fbApp, System.Web.HttpRequest request, System.Web.HttpResponse response, string perms, string redirectUrl)
    {
        Uri url = fbApp.GetLoginUrl();

        NameValueCollection nvc = System.Web.HttpUtility.ParseQueryString(url.Query);

        if (!string.IsNullOrEmpty(perms))
            nvc.Add("req_perms", perms);

        if (!string.IsNullOrEmpty(redirectUrl))
            nvc["next"] = GetAppRelativeUrl(redirectUrl);
        else if (request.QueryString.Count > 0)
            nvc["next"] = GetAppRelativeUrl(request.Path.Replace(request.ApplicationPath, string.Empty).Replace(request.ApplicationPath.ToLower(), string.Empty) + "?" + request.QueryString);
        else
            nvc["next"] = GetAppRelativeUrl(request.Path.Replace(request.ApplicationPath, string.Empty).Replace(request.ApplicationPath.ToLower(), string.Empty));

        UriBuilder ub = new UriBuilder(url);
        ub.Query = nvc.ToString();

        string content = CanvasUrlBuilder.GetCanvasRedirectHtml(ub.Uri);
        response.ContentType = "text/html";
        response.Write(content);
        response.End();
    }

    public static string GetAppRelativeUrl(string url)
    {
        return CanvasSettings.Current.CanvasPageUrl.ToString();
    }
}

我读到Safari不允许第三方cookie,我认为这就是问题所在。我的问题是,有一种方法可以使用SDK或我的选项来处理这个问题。

此致 安德斯·彼得森

3 个答案:

答案 0 :(得分:0)

我在使用HTTP更改HTTP标头中发送的数据的情况时遇到了一些问题...请确保您正在进行的任何解析/比较都不区分大小写。

答案 1 :(得分:0)

答案 2 :(得分:0)

这里我遇到了同样的问题,但现在我得到了野生动物园的解决方案..

只需在web.config中更改验证模式

<system.web>

<pages enableViewState="true" validateRequest="false" />
<httpRuntime requestValidationMode="2.0"/>
<!--
 Enable this code if you get still problem
<sessionState cookieless="true" regenerateExpiredSessionId="true" />-->