2010-02-01 25 views
26

Thời gian chờ trạng thái phiên được thiết lập sử dụng yếu tố web.config nàySự khác biệt về hình thức auth timeout timeout và phiên

<sessionState mode="InProc" cookieless="false" timeout="120" /> 

Các hình thức auth được cấu hình sử dụng yếu tố web.config này

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      name=".ASPXAUTH" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
      defaultUrl="default.aspx" 
      cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" /> 
    </authentication> 
</system.web> 

là gì sự khác biệt giữa thời gian chờ được chỉ định trong từng yếu tố này? Nếu cả hai đều khác nhau, nó sẽ hoạt động như thế nào?

Trả lời

57

Phiên bắt đầu mỗi khi người dùng mới truy cập trang web, bất kể họ có ẩn danh hay không. Xác thực có rất ít việc phải làm với Phiên.

Thời gian chờ xác thực là khoảng thời gian cookie xác thực tốt cho trình duyệt của người dùng. Khi cookie hết hạn, chúng phải xác thực lại để truy cập tài nguyên được bảo vệ trên trang web. Vì vậy, nếu Session hết trước cookie Xác thực - chúng vẫn được xác thực, nhưng tất cả biến phiên của họ biến mất và có thể gây ra lỗi trong trang web của bạn nếu bạn không bị kỷ luật trong việc kiểm tra giá trị rỗng và các điều kiện khác do thiếu phiên.

Nếu xác thực hết thời gian trước phiên, thì tất cả các biến phiên của họ sẽ vẫn tồn tại nhưng họ sẽ không thể truy cập tài nguyên được bảo vệ cho đến khi họ đăng nhập lại.

+5

Giải thích tuyệt vời. Tôi chỉ muốn thêm rằng có một thiết lập thời gian chờ quan trọng khác tồn tại trong IIS ở cấp độ pool ứng dụng. IIS sẽ khởi động lại các hồ bơi sau khi thời gian chờ nhàn rỗi quy định đã đạt, do đó, để làm cho các nguồn tài nguyên được phân bổ miễn phí. Bạn nên đảm bảo thời gian chờ không hoạt động của hồ bơi này luôn lớn hơn hai thời gian chờ đã đề cập ở trên hoặc bạn sẽ gặp lỗi bất kể thời gian chờ của phiên hoặc biểu mẫu được đặt thành. – learner

+1

Thật vậy, lời giải thích tuyệt vời. Giống như @learner, tôi muốn đề cập đến một cài đặt khác, ngoài [thời gian nhàn rỗi] (http://technet.microsoft.com/nl-nl/library/cc771956%28v=ws.10%29.aspx): [ Quy trình công nhân tái chế] (http://msdn.microsoft.com/en-us/library/aa720473%28v=vs.71%29.aspx). Theo mặc định, điều này xảy ra sau 29 giờ và đây là _not_ hết hạn trượt. Nếu chế độ trạng thái phiên của bạn là [đang xử lý] (http://msdn.microsoft.com/en-us/library/ms178586%28v=vs.100%29.aspx), các phiên sẽ bị xóa khi xảy ra tái chế. –

1

như mong đợi.

ví dụ: nếu phiên của bạn hết sau 20 phút, các biến phiên của bạn sẽ bị mất. nhưng người dùng có thể truy cập các trang được bảo vệ bằng xác thực.

nếu xác thực hết giờ, người dùng không thể truy cập trang mà trang đó bảo vệ và trạng thái của phiên không liên quan.

-3

Giá trị thời gian chờ của phiên phải nhỏ hơn thời gian chờ của FormsAuthentication. Vì phiên có thể bị xóa vì lý do và kịch bản sẽ không hoạt động.

Nếu Phiên làm việc hết giờ, hãy kiểm tra Vé phiếu xác thực. Nếu vé là hợp lệ và không hết thời gian, sau đó tạo lại phiên tại trang Đăng nhập của bạn (được định nghĩa trong tệp web.config của bạn dưới dạng tham số LoginUrl của cài đặt FormsAuthentication).

Nếu FormsAuthentication hết thời gian, ASP.NET FormsAuthentication tự động chuyển hướng người dùng đến Trang đăng nhập và người dùng phải đăng nhập lại.

Đừng quên rằng FormsAuthentication tự động chuyển hướng người dùng đến trang đăng nhập khi hết giờ bán vé.

Thực ra tôi thích cấu trúc này:

  1. Tạo một BasePage.cs cho yêu cầu đăng nhập trang.
  2. tại Page_Init trong phiên bản BasePage.cs. Nếu phiên hết hạn; chuyển hướng người dùng đến trang Đăng nhập.

    nếu (Phiên ["UserId"] == null) Response.Redirect ("Login.aspx", true);

  3. Tại Page_Load in Login.aspx kiểm tra Phiên và biểu mẫu Xác thực Thời gian đặt vé đúng cách.

    //User already have a session; redirect user to homepage. 
        if (SessionHandler.UserId != 0) 
         Response.Redirect("HomePage.aspx"); 
        else 
        { 
         //Session is killed; check Ticket is Valid or not 
         if (Context.User.Identity != null && Context.User.Identity.IsAuthenticated) 
         { 
          //Use Value of the FormsAuthentication 
          var customDataToCheck = Context.User.Identity.Name; 
    
          //Use value to check user is exist really and check db for user's session 
          var user = CheckUserData(customDataToCheck); 
          if (user != null) 
          { 
           //Start Session here 
           SessionHandler.StartSession(user); 
    
           //Redirect user to page what you want. 
           Response.Redirect("HomePage.aspx?ref=regenerated_session"); 
          }      
         } 
        } 
    
  4. tại Login.aspx sử dụng FormsAuthentication để tạo cookie.

    nếu (username == "testuser" & & password == "testpassword") { // Dữ liệu người dùng sẽ được ghi vào một cookie, lưu trữ dữ liệu người dùng mà bạn có thể kiểm tra người sử dụng là hợp lệ hay không (ví Ví dụ Tên người dùng hoặc UserId).
    System.Web.Security.FormsAuthentication.SetAuthCookie ("testUserData", keepMeSignedInCheckBox.Checked); Response.Redirect ("HomePage.aspx"); }