2012-11-06 5 views

Trả lời

9

Phiên bản ngắn, số Không có cách nào chắc chắn của máy chủ phát hiện nếu ứng dụng đã đóng trình duyệt của họ. Nó chỉ là bản chất của mô hình không đồng bộ của phát triển web.

Phiên bản dài, nếu thực sự thực sự quan trọng đối với bạn; Đặt một chút javascript vào trang gửi một bài đăng thường xuyên tới trang web của bạn dưới nền và thiết lập tác nhân hoặc dịch vụ trên máy chủ phân phối các phiên nếu nó không nhận được các tín hiệu "nhịp tim" thông thường này.

Bạn có thể đặt một postback javascript vào sự kiện unload() của trang nhưng không dựa vào nó, nó không luôn luôn cháy.

+0

Một cách khác để thiết lập một hành động điều khiển hoặc trình xử lý cho nhịp tim là chỉ cần đặt thời gian chờ của phiên là một phút sau khoảng thời gian nhịp tim của bạn. Sau đó, trình duyệt sẽ tự động hủy bỏ phiên riêng của nó vì cookie sẽ hết hạn. –

+0

Vui lòng không thực hiện phương pháp javascript, vì điều này ngăn không cho tính năng thời gian chờ thực hiện một trong các tính năng bảo mật quan trọng của nó - ký tên người dùng nếu họ rời khỏi máy tính của họ. Tôi đảm bảo nếu bạn làm điều này và nhận được một kiểm toán bảo mật chuyên nghiệp trên trang web của bạn, việc thiếu thời gian chờ sẽ được gắn cờ là một vấn đề. – elexis

0

Tôi nghĩ cookies có thể đáp ứng tốt hơn yêu cầu của bạn vào đây để quản lý phiên làm việc.

nó có nghĩa là dữ liệu phiên không nên được lưu trữ trên máy chủ và nên được với cuộc gọi của bạn, do đó bạn không cần phải lo lắng về thanh toán bù trừ các dữ liệu trên máy chủ.

+0

Cookie phải làm gì với sự kiện đóng của trình duyệt? Nếu người dùng đóng trình duyệt của họ, không có gì bị sa thải. Cookie sẽ ở đó, tại khách hàng, không làm gì cả. –

+0

@ RenéWolferinkL: điều đó có nghĩa là dữ liệu phiên không được lưu trữ trên máy chủ và phải có cuộc gọi của bạn, để bạn không phải lo lắng về việc xóa dữ liệu trên máy chủ. –

1

Điều này xảy ra theo mặc định bất cứ khi nào bạn đóng trình duyệt và điều đó không chỉ dành cho ASP.NET. Nó dành cho hầu hết các ngôn ngữ lập trình phía máy chủ có trạng thái phiên. Về cơ bản, bất kỳ cookie nào được thêm vào không chỉ định ngày hết hạn, sẽ bị xóa khi đóng trình duyệt.

Trường hợp điều này không áp dụng, là khi bạn đóng tab, đó là điều bạn sẽ không thể kiểm soát vì sự kiện đóng tab sẽ không được gửi trở lại máy chủ Web.

-1

Bạn có thể sử dụng Session_End trường hợp Global.aspx

//For Specific Session 
Session.Remove("SessionName"); 

//All the Session 
Session.Abandon(); 
+3

iShare: Xin lỗi Nó sẽ không kích hoạt tại thời điểm đóng trình duyệt ... – Saravanan

+0

đúng - sự kiện sẽ kích hoạt nếu khoảng thời gian chờ của phiên (20 phút đối với IIS tôi tin rằng nếu không được đặt rõ ràng) sẽ không có yêu cầu thêm từ trình duyệt. Vì vậy, đó là một dự đoán, và thường sẽ xảy ra một thời gian sau khi người dùng thực sự ngừng sử dụng trang web của bạn. – Jon

+0

Điều này chỉ được gọi khi phiên họp hết giờ. –

1

Hoặc bạn có thể kiểm tra xem bạn trạng thái phiên trước trên tất cả các trình duyệt mới mở cửa và có thể Session.clear() hoặc Session.Abandon() phiên trước.

điều này sẽ đảm bảo rằng mỗi lần bạn bắt đầu đăng ký, bạn sẽ nhận được phiên mới.

  1. sử dụng BasePage trong ứng dụng .net của bạn.
  2. Kiểm tra session.sessionid trên tải bảng nền.
  3. Thêm Inforamtion cách phát hiện phiên mới trong basepage. BasePage.Session.Link

Hope this helps liên quan Shaz

public class BasePage : Page 
{ 

      protected string mySessionId; 

      private CurrentUser _currentUser; 
      public CurrentUser _CurrentUser 
      { 
       get { return ((CurrentUser)HttpContext.Current.Session["myCurrentUser"]); } 
       set { _currentUser = value; } 
      } 


      protected override void OnLoad(EventArgs e) 
      { 

       if (Session["myCurrentUser"] != null) 
       { 
        if (_CurrentUser.ProUser) 
        { 

         mySessionId = Session.SessionID; // it means New Session 

        } 

        if (!mySessionId.IsNullOrDefault() && mySessionId != Session.SessionID) 
        { 
         Session.Abandon(); //Abandon current session and start new one     

        } 
       } 


      } 

} 
0

Yes.First của tất cả các trình duyệt tự động phiên rõ ràng khi trình duyệt được đóng lại.bạn có thể cố gắng chụp sự kiện đóng hoặc đóng trình duyệt trong trình duyệt bằng cách sử dụng chức năng javascript như trên trước khi dỡ và dỡ. Chủ yếu là trước khi tải xuống sự kiện chụp sự kiện đóng trình duyệt trong chrome, Firefox, IE 11.