2014-02-28 166 views
1

我们尝试实现ASP.Net窗体身份验证。ASP.NET窗体身份验证Cookie

一切工作在我们的开发环境/服务器。但是当我们发布到Production时,我们发现Cookie在FireFox和Chrome中无法正常工作。 IE11和Safari(Mac OSX)可以正常工作。

当我浏览器(Chrome)的“通过此页面设置Cookie”,我可以看到饼干(无论是在开发和生产环境)

但是,当我检查的开发工具(铬)有当我测试Production时没有Cookie,但是当我测试Development时有一个Cookie。

当我请求检查'Context.User.Identity.IsAuthenticated'时,生产环境返回false,而开发环境返回true。

的代码是相同的2台服务器上:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.StatusLabel.Text = "Authorized : " + Context.User.Identity.IsAuthenticated.ToString(); 
    } 

    protected void SetCookieButton_Click(object sender, EventArgs e) 
    { 
     FormsAuthentication.SetAuthCookie("TESTER", true); 
    } 

    protected void DeleteCookieButton_Click(object sender, EventArgs e) 
    { 
     FormsAuthentication.SignOut(); 
    } 

    protected void AuthorizedRequiredButton_Click(object sender, EventArgs e) 
    { 
     if (Context.User.Identity.IsAuthenticated) 
      this.StatusLabel.Text = "SUCCESS!!" + User.Identity.Name; 
     else 
      this.StatusLabel.Text = "NOT AUTHORIZED!"; 
    } 

    protected void AuthorizedNotRequiredButton_Click(object sender, EventArgs e) 
    { 
     this.StatusLabel.Text = "SUCCESS!!"; 
    } 

,所以是在Web.config

<authentication mode="Forms"> 
     <forms name="TestingSession" cookieless="UseCookies" protection="All" timeout="30" ></forms> 
    </authentication> 

这是为什么在Chrome和Firefox不工作在我的生产环境中,当在IE11和Safari(在Mac OSX上)工作。

为什么它在我的开发环境中测试过的所有浏览器中都能正常工作?它是一个IIS设置?服务器问题?或者我错过了别的东西。

我希望有人能帮助我。

编辑:2014年3月3日

一些更多的测试后,我注意到响应报头日期是错误的。

它始终是:星期二,2014年10月21日18时04分35秒GMT

当页面被称为试或其他浏览器的日期不会改变。

这意味着Cookie在返回给浏览器时已经过期了吗?

我已经检查了自定义标头的IIS7,但没有找到。

我们还重置了服务器上的Http服务,但仍然没有运气。

+0

你能否确定** Dev **和** Pro **都有相同的** web.config **设置*(连接字符串除外)*和相同** .Net Framework **? – Win

+0

Web.config和.Net Framework是相同的。除了数据库内容外,2台服务器上的几乎所有内容都是相同的。我开始认为它必须是一个设置的地方。 – Mithrodin

+0

*“这意味着Cookie在返回到浏览器时已经过期”* - 您的日期*时间超前*那么为什么会过期Cookie? – James

回答

2

我们通过重新启动服务器解决了问题。

经过一些更多的研究,我们发现Response Header Date与我们之前的问题是同一日期。

几个月前,我们向服务器添加了更多的RAM。之后,服务器日期在未来(2014年10月21日)确定。我们注意到这个问题非常快,并将日期设置回实际日期。

我们从未在此时执行服务器重启。看起来在响应头中返回的日期确实需要重启。

我们采取了解决此问题的步骤。

  • 确保服务器日期是实际日期。
  • 重置服务器上的HTTP服务。
  • 重新启动服务器。

我希望这可以帮助他人解决同样的问题。

相关问题