簡體   English   中英

ASP.NET 中的會話超時

[英]Session timeout in ASP.NET

我正在 IIS 6.0 中運行 ASP.NET 2.0 應用程序。 我希望會話超時為 60 分鍾,而不是默認的 20 分鍾。 我做了以下

  1. web.config設置<sessionState timeout="60"></sessionState>
  2. 在 IIS 管理器/網站屬性/ASP.NET 配置設置中將會話超時設置為 60 分鍾。
  3. 在應用程序池屬性/性能中將空閑超時設置為 60 分鍾。

我仍然在 20 分鍾時收到會話超時。 還有什么我需要做的嗎?

您在使用表單身份驗證嗎?

表單身份驗證使用它自己的超時值(默認為 30 分鍾)。 表單身份驗證超時會將用戶發送到會話仍處於活動狀態的登錄頁面。 這可能看起來像您的應用程序在會話超時時提供的行為,很容易將一個與另一個混淆。

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

將表單超時設置為小於會話超時可以為用戶提供一個窗口,在該窗口中可以重新登錄而不會丟失任何會話數據。

我不知道 web.config 或 IIS。 但我相信從 C# 代碼你可以做到

Session.Timeout = 60; // 60 is number of minutes

在 web.config 文件中使用以下代碼塊。 這里默認的會話超時是 80 分鍾。

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

使用以下鏈接獲取帶有彈出警報消息的會話超時。

會話超時示例

僅供參考:以上示例是使用 devexpress 彈出控件完成的,因此您需要使用普通彈出控件自定義/替換 devexpress 彈出控件。 如果您使用 devexpress 無需自定義

在我的情況下,它是應用程序池。 設置為空閑 xx 分鍾時重新啟動。 當我將它設置為不重啟時,它似乎使用了 Web Config 中的值。

您在 machine.config 中是否有任何可能生效的內容? 在 web.config 中設置會話超時應該會覆蓋 IIS 或 machine.config 中的任何設置,但是,如果您在應用程序的子文件夾中的某個位置有 web.config 文件,則該設置將覆蓋應用程序根目錄中的設置。

另外,如果我沒記錯的話,IIS 中的超時僅影響 .asp 頁面,而不影響 .aspx。 您確定 web.config 中的會話代碼正確嗎? 它應該看起來像:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>

這通常就是你需要做的...

您確定 20 分鍾后,會話丟失的原因是空閑嗎...

會話可能被清除的原因有很多。 您可以為 IIS 啟用事件日志記錄,然后可以使用事件查看器查看會話被清除的原因...您可能會發現它可能是出於其他原因?

您還可以閱讀事件消息和相關事件表文檔

https://usefulaspandcsharp.wordpress.com/tag/session-timeout/

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="60" slidingExpiration="true" />
</authentication>

<sessionState mode="InProc" timeout="60" />

如果您使用身份驗證,我建議在 web.config 文件中添加以下內容。

在我的情況下,用戶在超時時被重定向到登錄頁面:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

由於 ASP.Net 核心 1.0(vNext 或用於它的任何名稱)會話的實現方式不同。 我更改了Startup.cs的會話超時值,使用以下方法void ConfigureServices

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

或者,如果您想使用appsettings.json文件,您可以執行以下操作:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

您可以在 IIS 中找到該設置:

設置

它可以在“ASP”下的服務器級別、網站級別或應用級別找到。

我認為你可以在 web.config 級別設置它here。 請自行確認。

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>

IIS 會話超時值僅適用於經典 .asp 應用程序,這由 IIS 配置控制。 在您的情況下,對於 ASP.NET 應用程序,僅適用 web.config 指定的超時值。

默認會話超時定義到 IIS 為 20 分鍾

對托管在 IIS 8.5 Web 上的每個站點執行以下步驟

IIS超時配置

打開 IIS 8.5 管理器。

單擊站點名稱。

在“管理”部分下選擇“配置編輯器”。

從配置編輯器頂部的“部分:”下拉列表中,找到“system.web/sessionState”。

將“超時”設置為“00:20:00 或更少”,根據應用程序使用可能的最低值。可接受的值為高值應用程序為 5 分鍾,中值應用程序為 10 分鍾,低值應用程序為 20 分鍾- 價值應用。

在“操作”窗格中,單擊“應用”。

如果您想要網站的會話超時而不是刪除

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

web.config 文件中的標記。

Timeout 屬性指定分配給應用程序的 Session 對象的超時期限,以分鍾為單位。 如果用戶在超時期限內沒有刷新或請求頁面,則會話結束。

IIS 6.0:允許的最小值為 1 分鍾,最大值為 1440 分鍾。

Session.Timeout = 600;

在 IIS 中更改會話超時值后,請重新啟動 IIS。 為此,請轉到命令提示符。 鍵入 IISRESET 並按回車鍵。

暫無
暫無

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

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