ASP.NET身份验证cookie仅在IE中消失,仅在特定位置消失

时间:2011-12-13 09:56:01

标签: asp.net internet-explorer authentication forms-authentication

Internet Explorer在一次重定向后未保留我的身份验证Cookie。

情况如下:

我有一个在共享的iis7主机上运行的ASP.NET 2.0 Web应用程序。应用程序使用表单身份验证来处理登录和用户身份,并在客户端计算机上为此目的编写cookie(.ASPXFORMSAUTH)。

在IE中(使用版本8,9检查),从某些位置,在第一页之后不会保留身份验证Cookie。观察到的行为是:

  1. 用户名和密码以登录表格提交
  2. 用户被成功重定向到第一个登录后的页面(而且fiddler显示.ASPXFORMSAUTH cookie存在)
  3. 点击另一个链接或点击F5进行刷新后,用户有权登录,并且身份验证cookie(根据fiddler)不再存在。 在刷新/单击时,请求标头中缺少身份验证cookie。
  4. 这不会发生在Chrome / FF中,即使在IE中,它似乎也取决于我所连接的位置。

    同样,在本地(使用VS2008中的内部开发服务器),一切正常,并且在fiddler中反映也很好。

    我现在正在敲打它几天。认为它可能是某种奇怪的防火墙问题,但无法确定任何结论。

    我们将不胜感激。

4 个答案:

答案 0 :(得分:10)

IE有一个奇怪的错误 - 由于某些原因,如果域名中有非字母数字字符,IE将不会持久存在cookie ...因此,不同的调用之间你将没有持久会话。

检查您的域中是否包含非字母数字字符,例如test_domain或test-domain等。不幸的是,我不知道是否存在任何修复错误的域名或直接通过IP访问它的问题。你在本地没有问题的原因是你指向http://localhost,这很好。一旦部署到非IE兼容域,您就会看到问题。

发生在我身上,花了几个小时才发现原因。希望这可以帮助。用火杀死IE的另一个原因。

答案 1 :(得分:1)

我的解决方案是其他解决方案的组合:

  1. IE not saving asp.net authentication token / cookies
  2. http://connect.microsoft.com/VisualStudio/feedback/details/662275/asp-net-user-agent-sniffing-and-ie10-internet-explorer-10
  3. 升级到.NET 4.0,在web.xml中添加标签ticketCompatibilityMode =“Framework40”:http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx
  4. 请注意,真正的最终解决方案是第3个。

    最后但并非最不重要:一旦我在上面设置了这个标志,我就不得不在后面的代码中更改logout方法,因为旧的不再注销:

    protected void LoginStatusLink_LoggedOut(object sender, EventArgs e) {
        // remove the authenticatation cookies from the browser
        FormsAuthentication.SignOut();
    
        // force a new 'expired' auth cookie
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName);
        cookie.Expires = DateTime.Now.AddMonths(-1);
        Response.Cookies.Add(cookie);
    
        // delete roles cookie
        Roles.DeleteCookie();
    
        // clear and abandon session
        Session.Clear();
        Session.Abandon();
    
        // this line just to leave (forget) the current page
        this.Response.Redirect("~/");
    }
    

答案 2 :(得分:0)

1.尝试创建持久性cookie

2.检查IEp的cookie设置>

答案 3 :(得分:0)

检查服务器的日期。我有一种情况,服务器落后于浏览器1天,因此身份验证cookie基本上已过期。这影响了IE,但不影响FF。