ASP.NET Cookie复制为子域

时间:2014-09-17 14:48:44

标签: asp.net authentication cookies forms-authentication .aspxauth

我有两个asp.net网站。一个像domain.com,第二个是sub.domain.com。 domain.com在登录时设置aspxauth cookie并在注销时将其删除(通过过去的过期日期)。 Cookie域名是" .domain.com"所以双方都可以使用它。 sub.domain.com对于cookie是被动的,只是尝试读取cookie并在找到cookie时验证用户身份。

问题所在。经过一段时间后,浏览器会使用" domain.com"获取第二个ASPXAuth cookie。 (没有"。")域名 - 因此注销不起作用,因为只删除了第一个(" .domain.com")cookie。

配置

<authentication mode="Forms">
  <forms loginUrl="~/account/login" timeout="2880" domain=".domain.com"/>
</authentication>

设置Cookie

public static void SetAuthCookie(IUserPrincipal principal, DateTime expiration)
    {
        var ticket = new FormsAuthenticationTicket(1, principal.Identity.Name, DateTime.Now, expiration, false,
            principal.SessionId, FormsAuthentication.FormsCookiePath);

        var encTicket = FormsAuthentication.Encrypt(ticket);
        var response = HttpContext.Current.Response;

        if (response.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        }

        var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
        {
            Expires = expiration,
            Secure = FormsAuthentication.RequireSSL,
        };
        response.Cookies.Set(cookie);
    }

删除Cookie

 public static void SignOut()
    {
        SetContextPrincipal(null);
        FormsAuthentication.SignOut();
    }

0 个答案:

没有答案