Thời gian chờ phiên trong ASP.NET


163

Tôi đang chạy một ứng dụng ASP.NET 2.0 trong IIS 6.0. Tôi muốn thời gian chờ phiên là 60 phút thay vì 20 phút mặc định. Tôi đã làm như sau

  1. Đặt <sessionState timeout="60"></sessionState> trong web.config.
  2. Đặt thời gian chờ phiên thành 60 phút trong trình quản lý IIS / Thuộc tính trang web / Cài đặt cấu hình ASP.NET.
  3. Đặt thời gian chờ nhàn rỗi thành 60 phút trong thuộc tính / hiệu suất nhóm ứng dụng.

Tôi vẫn nhận được thời gian chờ phiên là 20 phút. Có điều gì khác tôi cần phải làm không?


1
Vui lòng cung cấp thông tin về cách bạn đo trong 20 phút. Hãy chắc chắn rằng 20 phút là hết thời gian Phiên chứ không phải loại nào khác.
John Saunders

11
Vui lòng đánh dấu các câu trả lời chất lượng như được chấp nhận bằng cách sử dụng dấu kiểm gần mũi tên upvote / downvote
Brian Webster

3
Tám năm sau, câu trả lời đúng vẫn không được chấp nhận.
Nathan

Vui lòng làm rõ ý của bạn về trình quản lý IIS / thuộc tính trang web / cài đặt cấu hình ASP.NET. Từng bước bạn đã thay đổi điều gì trong IIS?
niico

Câu trả lời:


275

Bạn đang sử dụng xác thực Mẫu?

Xác thực mẫu sử dụng giá trị riêng của nó cho thời gian chờ (30 phút theo mặc định). Hết thời gian xác thực mẫu sẽ gửi người dùng đến trang đăng nhập với phiên vẫn hoạt động. Điều này có thể trông giống như hành vi mà ứng dụng của bạn đưa ra khi hết phiên làm cho dễ nhầm lẫn giữa cái này với cái kia.

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

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

Đặt thời gian chờ biểu mẫu thành một cái gì đó ít hơn thời gian chờ phiên có thể cung cấp cho người dùng một cửa sổ để đăng nhập lại mà không mất bất kỳ dữ liệu phiên nào.


@ Unbreakable Trong vài phút.
Word Rearranger

43

Tôi không biết về web.config hoặc IIS. Nhưng tôi tin rằng từ mã C # bạn có thể làm như thế

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

21
Điều này sẽ chỉ điều chỉnh thời gian chờ của phiên hiện tại? Hay điều này sẽ điều chỉnh thời gian chờ cho toàn bộ ứng dụng?
Johncl

2
Không có gì trong tài liệu chỉ ra rằng cài đặt Session.Timeoutkhác với việc sử dụng web.config hoặc IIS, vì vậy tôi cho rằng nó là dành cho toàn bộ ứng dụng.
Drasive

Tôi nghĩ rằng @Drasive có quyền, nhưng nó phải được chứng minh ít nhất bằng 2 máy khách được kết nối tách biệt với máy chủ và kiểm tra thời gian chờ của phiên nhàn rỗi.
QMaster

42

Sử dụng khối mã sau trong tệp web.config của bạn. Ở đây thời gian phiên mặc định là 80 phút.

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

Sử dụng liên kết sau cho Thời gian chờ phiên với thông báo cảnh báo bật lên.

Ví dụ hết thời gian phiên

FYI: Các ví dụ trên được thực hiện với điều khiển cửa sổ bật lên, vì vậy bạn cần tùy chỉnh / thay thế điều khiển cửa sổ bật lên bằng điều khiển cửa sổ bật lên thông thường. Nếu bạn sử dụng deve े không cần tùy chỉnh


vô dụng sai?
Kiquenet

3
@Kiquenet, nếu bạn đặt cookiless thành true thì sessionId của bạn sẽ được nhúng vào URL có rủi ro bảo mật cao. Khung công tác ASP.NET chèn một id duy nhất vào URL, bạn có thể kiểm tra điều này bằng cách vô hiệu hóa cookie hoặc bằng cách đặt thuộc tính cookiless thành true như bạn đã làm. Theo MSDN, theo mặc định, giá trị SessionID được lưu trữ trong cookie phiên không hết hạn trong trình duyệt nhưng nếu bạn chỉ định cookieless = "true" thì ASP.NET sẽ duy trì trạng thái phiên vô dụng bằng cách tự động chèn ID phiên duy nhất vào URL của trang .
Hamza Khanzada

8

Bạn có bất cứ điều gì trong machine.config có thể có hiệu lực không? Tuy nhiên, đặt thời gian chờ phiên trong web.config sẽ ghi đè mọi cài đặt trong IIS hoặc machine.config, tuy nhiên, nếu bạn có tệp web.config ở đâu đó trong thư mục con trong ứng dụng của mình, cài đặt đó sẽ ghi đè lên cài đặt gốc trong ứng dụng của bạn.

Ngoài ra, nếu tôi nhớ chính xác, thời gian chờ trong IIS chỉ ảnh hưởng đến các trang .asp chứ không ảnh hưởng đến .aspx. Bạn có chắc chắn mã phiên của bạn trong web.config là chính xác? Nó sẽ trông giống như:

<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"
/>

8

Trong tình huống của tôi, đó là Application Pool. Nó được thiết lập để khởi động lại khi không hoạt động trong xx phút. Khi tôi đặt nó không khởi động lại, nó dường như sử dụng giá trị từ Cấu hình web.


Tôi biết chúng tôi là năm 2020 nhưng chết tiệt điều này chỉ giải quyết vấn đề của tôi nhờ!
Binary9

8

Đó thường là tất cả những gì bạn cần làm ...

Bạn có chắc chắn rằng sau 20 phút, lý do khiến phiên bị mất là do không hoạt động mặc dù ...

Có nhiều lý do là tại sao phiên có thể bị xóa. Bạn có thể kích hoạt ghi nhật ký sự kiện cho IIS và sau đó có thể sử dụng trình xem sự kiện để xem lý do tại sao phiên bị xóa ... bạn có thể thấy rằng đó là vì lý do khác?

Bạn cũng có thể đọc tài liệu cho các thông báo sự kiệnbảng sự kiện liên quan .


3

Nếu bạn đang sử dụng Xác thực, tôi khuyên bạn nên thêm phần sau vào tệp web.config.

Trong trường hợp của tôi, người dùng được chuyển hướng đến trang đăng nhập khi hết thời gian:

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

Tôi đã gặp lỗi tại đây <xác thực chế độ = "Biểu mẫu"> sau khi tôi đặt nó trong web.config
Lst Patrick


2

Vì lõi ASP.Net 1.0 (vNext hoặc bất kỳ tên nào được sử dụng cho nó), các phiên được triển khai khác nhau. Tôi đã thay đổi giá trị thời gian chờ phiên bằng Startup.cs, void ConfigureServicessử dụng:

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

Hoặc nếu bạn muốn sử dụng appsettings.jsontệp, bạn có thể làm một cái gì đó như:

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

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

2

Bạn có thể tìm thấy cài đặt ở đây trong IIS:

Cài đặt

Nó có thể được tìm thấy ở cấp độ máy chủ, cấp độ trang web hoặc cấp độ ứng dụng trong "ASP".

Tôi nghĩ bạn có thể đặt nó ở cấp web.config ở đây. Vui lòng xác nhận điều này cho chính mình.

<configuration>
   <system.web>

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

   </system.web>
</configuration>

Còn trong Global.asax?
Kiquenet

1

Giá trị thời gian chờ của phiên IIS chỉ dành cho các ứng dụng .asp cổ điển, điều này được kiểm soát trên cấu hình IIS. Trong trường hợp của bạn Đối với các ứng dụng ASP.NET, chỉ áp dụng giá trị thời gian chờ do web.config chỉ định.


Điều gì về thời gian chờ nhóm ứng dụng của IIS?
SteveCav

1

Thời gian chờ phiên mặc định được xác định trong IIS đến 20 phút

Thực hiện theo các quy trình dưới đây cho mỗi trang web được lưu trữ trên web IIS 8.5

Cấu hình hết thời gian IIS

Mở Trình quản lý IIS 8.5.

Nhấp vào tên trang web.

Chọn "Trình chỉnh sửa cấu hình" trong phần "Quản lý".

Từ danh sách thả xuống "Phần:" ở đầu trình chỉnh sửa cấu hình, tìm "system.web / sessionState".

Đặt "thời gian chờ" thành "00:20:00 hoặc ít hơn, sử dụng giá trị thấp nhất có thể tùy thuộc vào ứng dụng. Giá trị chấp nhận được là 5 phút cho các ứng dụng có giá trị cao, 10 phút cho các ứng dụng có giá trị trung bình và 20 phút cho mức thấp ứng dụng giá trị.

Trong ngăn "Hành động", nhấp vào "Áp dụng".


0

nếu bạn muốn thời gian chờ phiên cho trang web hơn là loại bỏ

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

thẻ từ tệp web.config.


-1

Thuộc tính Hết giờ chỉ định khoảng thời gian chờ được gán cho đối tượng Phiên cho ứng dụng, tính bằng phút. Nếu người dùng không làm mới hoặc yêu cầu một trang trong khoảng thời gian chờ, phiên kết thúc.

IIS 6.0: Giá trị tối thiểu được phép là 1 phút và tối đa là 1440 phút.

Session.Timeout = 600;

-2

Sau khi thay đổi giá trị thời gian chờ phiên trong IIS, vui lòng khởi động lại IIS. Để đạt được điều này, hãy đến dấu nhắc lệnh. Nhập IISRESET và nhấn enter.


Chỉnh sửa tệp web.config tự động khiến IIS đặt lại.
Timothy Gonzalez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.