簡體   English   中英

Asp.net形成身份驗證cookie,不遵守IIS7的超時

[英]Asp.net forms authentication cookie not honoring timeout with IIS7

身份驗證cookie似乎在短時間(一天左右)后超時。 我正在使用表單身份驗證,並在web.config中使用slidingExpiration =“false”的timeout =“10080”。 使用該設置,cookie應在用戶成功通過身份驗證后約7天到期。

這與IIS6一樣廣告,但當我將網站移動到IIS7時,cookie過期的速度要快得多。 我已經在IE和Firefox的多台機器上確認了這種行為,這讓我相信它是一個IIS7設置。

IIS7是否存在與身份驗證相關的隱藏設置? 除匿名用戶跟蹤外,網站禁用所有其他身份驗證類型。

使用本地web.config或全局machine.configmachineKey值對身份驗證cookie進行加密。 如果沒有明確設置這樣的密鑰,則會自動生成一個密鑰,但它不會持久存儲到磁盤 - 因此,只要應用程序重新啟動或由於不活動而“回收”,它就會更改,並且將在下一擊。

解決問題非常簡單,只需將<machineKey>配置部分添加到web.config ,或者可能(最好是?)添加到服務器上的machine.config (未經測試):

<system.web>
  ...
  <machineKey 
    validationKey="..."
    decryptionKey="..."
    validation="SHA1"
    decryption="AES"/>
  ...
</system.web>

Google 為可以為您生成此部分的網站生成隨機計算機密鑰 如果您的應用程序處理機密信息,您可能希望自己創建密鑰。

我的理解是,消費方 - 瀏覽器使cookie過期,這意味着IIS對此沒有發言權

將在IIS中配置的會話狀態設置為在進程中使用Cookie超時=您所需的時間使用主機標識進行模擬

同時將EnableSessionState設置為true(這也是默認值)

最重要的是以經典模式運行應用程序池。

希望你的問題能解決。

首先,我必須說這些“指南”是通用的,而不是iis-7獨有的。 <system.web>下的web.config中,您有<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" timeout="130" cookieless="false"/> (需要ASP.NET會話狀態)在localhost上運行的服務器服務)或<sessionState mode="InProc" timeout="130" cookieless="false"/> 主要區別在於InProc中會話狀態數據放置在應用程序進程本身中。 在另一個設置中,不同的服務正在進行存儲,您的應用程序只是輪詢它以獲取所需的數據。 使用了兩者(以及sql-server會話狀態模式),InProc是最不可靠但最快的。 Sql-server是最可靠和最慢的,而StateServer模式在中間的某個地方僅在電源/系統故障的情況下是不可靠的。 話雖如此,我必須說,對於請求數較少的網站,性能損失可以忽略不計。

現在,我的經驗表明,InProc的穩定性非常難以預測; 我曾經和你有同樣的問題。 我通過調整應用程序池的設置來擴展應用程序的穩定性,我通過切換到SessionState(它還允許關閉應用程序而不丟失會話狀態數據)完全刪除了問題。

您可能遭受應用程序/會話穩定性的原因:

  1. IIS和應用程序池。 網站的每個virtul目錄都分配給一個應用程序池(默認為“DefaultAppPool”),該應用程序池具有一系列設置,您可以在其中定義該流程“被回收”的時間間隔 - 並因此保留系統資源。 如果不更改設置,應用程序可能會觸發流程回收器的一個標准,這意味着您的應用程序已被破壞

  2. 殺毒軟件。 在ASP.NET應用程序中,如果觸摸了web.config(以及應用程序所依賴的任何子.config文件)文件,則重新啟動應用程序。 現在有些情況下防病毒程序可能會觸摸web.config文件(比如每天一次?),因此應用程序重新啟動並且會話數據丟失。

  3. 錯誤的配置特別是對於表單身份驗證,與時間相關的設置和行為始終依賴於Web會話,其中auth會話位於Web會話下。

我不知道的是,表單身份驗證模塊是否僅依賴於會話域,或者它是否也將數據放在應用程序域中。 如果是第二種情況,則可能必須禁用應用程序池中的所有回收設置,以及再次檢查配置/防病毒以及存儲會話數據的用戶。

我最近有同樣的問題,即使我將會話超時設置為2小時,我的網站每20分鍾超時一次。 我發現這是因為IIS工作進程每20分鍾超時一次: http//technet.microsoft.com/en-us/library/cc783089(WS.10).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM