2014-02-28 165 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服務。
  • 重新啓動服務器。

我希望這可以幫助他人解決同樣的問題。

相關問題