IE和旧浏览器中的跨域会话asp mvc

时间:2014-02-10 08:02:59

标签: asp.net-mvc json session cross-domain session-cookies

假设您有网站http://simple.com和许多子域名,例如:http://first.simple.comhttp://second.simple.comhttp://last.simple.com

假设用户访问last.simple.com并通过普通的ASP .NET成员资格提供程序进行身份验证。

然后,从该网站,他们被发送到(重定向,链接,无论有效)网站http://last.simple.com,并且网站http://first.simple.com的目的是将该用户传递到其他网站作为状态isAuthenticated,以便网站http://last.simple.com不再要求所述用户的凭据。

这适用于Chrome,Mozila,Opera(最新版本),Safari,但不适用于IE(所有版本)和Opera(< v12.01)。

方案:

  

用户,地址(first.simple.com) - >发帖查询到服务器,json回答,   如果auth - 重定向。可能是json中的问题(需要使用'jsonp')?

的web.config

<system.web>
<authentication mode="Forms">
      <forms name=".ASPXAUTH" protection="All" domain=".simple.com" enableCrossAppRedirects="true" />
</authentication>
</system.web>

SessionService

public void Authenticate(string username)
        {
            FormsAuthentication.SetAuthCookie(username, false);

            var cookie = FormsAuthentication.GetAuthCookie(username, false);
            cookie.HttpOnly = true;
            cookie.Path = "/";
            cookie.Domain = domain;
            this.context.Response.AppendCookie(cookie);
        }

Global.asax中

 protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
    {
        const string aspSessionid = "ASP.NET_SessionId";

        if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
        {
            var cookie = Context.Request.Cookies[aspSessionid];
            if (cookie != null && Context.Session != null && !string.IsNullOrEmpty(Session.SessionID))
            {
                Response.Cookies.Add(new HttpCookie(aspSessionid, Session.SessionID) { Domain = domain, Path = "/", Expires = DateTime.Now.AddDays(30) });
            }
        }
    }

0 个答案:

没有答案