我們嘗試實現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