2012-02-21 33 views
20

Trong web.config, tôi đặt thời gian chờ trong sessionState thành 20 phút. Theo MSDN, thời gian chờ này chỉ định số phút mà một phiên có thể không hoạt động trước khi nó bị hủy bỏ. Trong IIS 7, DefaultWebSite-> Session State-> Cookie Settings-> Time Out tự động được điền với giá trị timeout được đặt trong web.config, trong trường hợp của tôi là 20 phút. Ngoài ra, Application Pools-> DefaultAppPool-> Advanced Settings-> idleTimeout, tôi đặt nó là 10 phút.Thời gian chờ của phiên làm việc như thế nào trong IIS 7?

Sau đó, tôi đã thực hiện hai thử nghiệm: Thử nghiệm đầu tiên: Tôi đã đăng nhập vào ứng dụng web của mình lúc 3:45 tối, không hoạt động trong 10 phút. Vào lúc 3:55 chiều, tôi đã cố gắng sử dụng ứng dụng của mình, tôi bị đuổi ra ngoài. Tôi nghĩ rằng idleTimeout xuất hiện.

Kiểm tra thứ hai: Tôi đã đăng nhập vào ứng dụng web của mình lúc 4:00 chiều, chơi với ứng dụng lúc 4:05 chiều, 4:10 chiều, 4:15 chiều và 4:20 chiều. Tôi dự kiến ​​sẽ bị đuổi vào lúc 4:20 chiều. Nhưng tôi thì không. Tôi nghĩ thời gian chờ trạng thái phiên (20 phút) trong IIS 7 là khoảng thời gian tối đa mà phiên người dùng có thể hoạt động trước khi Web Agent thách thức người dùng xác thực lại. Rõ ràng từ thử nghiệm này, nó không phải là. Bất cứ ai có thể giải thích điều đó cho tôi? Ngoài ra, làm thế nào tôi có thể thiết lập thời gian chờ cho trường hợp trên?

Trả lời

34

Thời gian chờ của phiên là thời gian chờ trượt được đặt lại cho người dùng thành giá trị được định cấu hình mỗi khi họ truy cập máy chủ.

Thời gian chờ của Ứng dụng không hoạt động nếu không có yêu cầu nào đối với đơn đăng ký của bạn trong khoảng thời gian đó. do đó

Các kịch bản thông thường là:

Time | User A  | User B  | Session States 
------+--------------+--------------+------------------------------------------- 
12:00 | Visits Page1 |    | A: New Session, Time-out: 20 minutes 
12:02 | Visits Page2 |    | A: Time-out reset: 20 minutes 
12:10 |    | Visits Page1 | A: Time-out: 12 min; B: New: 20 minutes 
12:15 |    | Visits Page2 | A: Time-out: 07 min; B: Time-out: 20 min 
12:22 |    |    | A: times out; B: 13 min remaining 
12:32 |    |    | Application Shuts Down (Idle time reached) 
12:35 | Visits Page3 |    | A: New Session Starts 

Nếu dùng A đã quay trở lại trang web sau khi 12:22 họ sẽ có một phiên hoàn toàn mới, và bất kỳ giá trị mà bạn đã được lưu trữ ở đó trước đây sẽ là mất đi.

Cách duy nhất để đảm bảo rằng một phiên tồn tại trong lần khởi động lại ứng dụng là định cấu hình dịch vụ SessionState hoặc Kỳ phiên SQL và đảm bảo rằng bạn đã configured the machine.key sao cho nó không được tự động phát mỗi khi máy chủ khởi động lại.

Nếu bạn đang sử dụng các cơ chế ASP.NET tiêu chuẩn để xác thực, sau đó ASP.NET sẽ sẽ phát hành hai tập tin cookie cho mỗi người dùng:

  1. Xác thực Mã: Điều khiển bằng các thiết lập Authentication time-out, cho phép người dùng được tự động đăng nhập vào trang web của bạn nếu cookie chưa hết hạn, điều này có thể được cố định hoặc trượt và mặc định là 30 phút, có nghĩa là mã thông báo xác thực của họ có thể đối phó với khoảng thời gian "nhàn rỗi" dài hơn phiên của họ.
  2. Mã phiên: Được kiểm soát bởi cài đặt Thời gian chờ phiên, cho phép ứng dụng của bạn lưu trữ và truy cập các giá trị cho mỗi người dùng trong suốt thời gian truy cập của họ.

Cả hai cookie đó đều được mã hóa bằng phím máy - vì vậy nếu ứng dụng của bạn tái chế và tạo khóa mới không phải mã thông báo nào có thể được giải mã, yêu cầu người dùng đăng nhập và tạo phiên mới.


Hưởng ứng ý kiến:

  1. Giây phút 20 phiên time-out liên quan đến các mục mà bạn đã đặt trong đối tượng người dùng phiên (HttpSessionState) sử dụng phương pháp Session.Add(string, object).
  2. Điều đó tùy thuộc.Nếu bạn đã chính xác configured the machine.key, mã thông báo xác thực sẽ vẫn hợp lệ và nếu phiên của bạn không còn "InProc" thì các phiên này cũng sẽ vẫn tiếp tục thông qua khởi động lại ứng dụng và vẫn có thể đọc được - xem ghi chú ở trên.
+0

nhưng tại sao tôi không cần phải đăng nhập lại trong lần kiểm tra thứ hai? – GLP

+0

Bởi vì mỗi lần bạn truy cập vào máy chủ, bộ hẹn giờ được đặt lại - theo bảng của tôi. –

+0

Cảm ơn Zhaph, tôi vẫn có hai câu hỏi, (1) 20 phút sẽ ảnh hưởng đến điều gì? (2) B có phải relogin sau khi ứng dụng tắt không? – GLP

Các vấn đề liên quan