2012-12-25 36 views
6

Tôi có một ứng dụng ở khoảng 20 http generic handler được sử dụng cho ajax call.
Tôi đã sử dụng IReadOnlySessionState để truy cập phiên trong trình xử lý của mình. Mọi thứ đều hoạt động tốt.
Xử lý thời gian chờ của phiên trong trình xử lý http chung

Nhưng khi phiên hết hạn, trình xử lý của tôi sẽ trả về một số html khi chuyển hướng đến trang mặc định và html của trang mặc định được gửi lại trong phản hồi.

Để khắc phục sự cố này.
Tôi đã kiểm tra các biến session trong xử lý và nếu nó là null tôi đã viết

context.Response.Write("logout") 

Và tôi kiểm tra trong jQuery ajax thời tiết nó là logout hoặc bất cứ điều gì khác.

$.ajax({ 
      url: "myhandler.ashx", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { checklogout(data); $("#loading").hide(); }, 
      error: function() { $("#loading").hide(); }, 
      async: false 
     }); 


Nếu đăng xuất thì tôi đã sử dụng vị trí để chuyển hướng đến trang đăng nhập.
Tôi đang sử dụng form-authentication để xác thực người dùng.

Có cách nào tốt hơn để kiểm tra và chuyển hướng đến trang đăng nhập bằng cách sử dụng cuộc gọi jquery-ajax hay không.

+1

Nó có lẽ sẽ tốt hơn để trả lại [mã trạng thái HTTP] thích hợp (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html), chẳng hạn như * 401 Trái phép * khỏi trình xử lý của bạn (và có thể tạo một trình xử lý cơ sở duy nhất để bạn không lặp lại logic). Bạn có thể tìm giá trị này trong các tùy chọn AJAX trung tâm của bạn ('$ .ajaxsetup'), vì vậy mã để kiểm tra chỉ cần đi ở một nơi. Có phải là dọc theo dòng của những gì bạn đang tìm kiếm? –

Trả lời

2

Bạn có trình xử lý trong thư mục tự động kiểm soát bằng xác thực của asp.net.

Điều tôi nên làm là không cho phép tự động kiểm soát bằng xác thực asp.net bằng cách thiết lập trên web.config để cuộc gọi đến trình xử lý sẽ thực hiện ether người dùng đã đăng nhập ether không, và bên trong trình xử lý, tôi sẽ kiểm tra điều đó, nếu người dùng gọi trình xử lý đó có phiên và xác thực.

Sau đó, trong trường hợp đó người dùng không có chứng thực để đọc mà handler tôi trở lại một lá cờ đơn giản để gọi ajax của tôi, sau đó nhận ra và làm cho chuyển hướng, ví dụ như:

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

Dường như là ý tưởng hay. Nhưng khi 'dữ liệu' không có thuộc tính' redirectToLogin' nó sẽ đưa ra một ngoại lệ 'java-script' hay không. Ngoài ra nếu tôi sử dụng '' trong file webconfig của tôi sẽ có bất kỳ mối đe dọa an ninh mặc dù tôi sẽ kiểm tra phiên người dùng bên trong tất cả các trình xử lý. –

+1

@krshekhar Bạn có thể trả về một chuỗi đơn giản như "ko" hoặc cờ khác, điều này rất dễ giải quyết. – Aristos

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