我们尝试实现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服务,但仍然没有运气。
你能否确定** Dev **和** Pro **都有相同的** web.config **设置*(连接字符串除外)*和相同** .Net Framework **? – Win
Web.config和.Net Framework是相同的。除了数据库内容外,2台服务器上的几乎所有内容都是相同的。我开始认为它必须是一个设置的地方。 – Mithrodin
*“这意味着Cookie在返回到浏览器时已经过期”* - 您的日期*时间超前*那么为什么会过期Cookie? – James