2012-12-25 20 views
6

Mam aplikację, w której około 20 http generic handler jest używanych do ajax call.
Użyłem IReadOnlySessionState do uzyskiwania dostępu do sesji w moich modułach obsługi. Wszystko działa poprawnie.
Limit czasu sesji obsługi w ogólnej procedurze obsługi http

Ale po wygaśnięciu sesji mój przewodnik zwraca jakiś html podczas przekierowywania do strony domyślnej, a html strony domyślnej jest odsyłany w odpowiedzi.

Aby rozwiązać ten problem.
Sprawdziłem zmiennej sesji w przewodnika i jeśli jest null Pisałem

context.Response.Write("logout") 

I sprawdzić w jQuery pogody ajax to wylogowania lub cokolwiek innego.

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


Jeśli jest to wylogowanie, użyłem lokalizacji do przekierowania na stronę logowania.
Do uwierzytelniania użytkownika używam form-authentication.

Czy istnieje lepsze podejście do sprawdzania i przekierowywania do strony logowania za pomocą wywołania jquery-ajax.

+1

To będzie prawdopodobnie lepiej aby zwrócić prawidłowy [kod statusu HTTP] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html), na przykład * 401 Unauthorized * z programu obsługi (i może utworzyć pojedynczy handler bazowy, aby nie powtarzasz logiki). Możesz poszukać tej wartości w swoich centralnych opcjach AJAX ('$ .ajaxsetup'), więc kod do sprawdzenia wystarczy, aby przejść w jednym miejscu. Czy to na wzór tego, czego szukasz? –

Odpowiedz

2

Masz swoje programy obsługi w katalogu, który automatycznie kontroluje przez uwierzytelnianie asp.net.

Co powinienem zrobić, to nie pozwolić automatycznej kontroli przez uwierzytelnianie asp.net przez setup, który na web.config, więc wywołanie do obsługi wykona ether użytkownik jest zalogowany w ether, a wewnątrz handlerów będę sprawdź to, jeśli użytkownik, który wywołuje ten handler, ma sesję i uwierzytelnienie.

Następnie w przypadku, gdy użytkownik nie mają autoryzacji do czytania tej obsługi wrócę prostego flagę na moje wezwanie ajax, a następnie rozpoznać i zrobić przekierowanie, na przykład jako:

$.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

Wydaje się być dobrym pomysłem. Ale gdy 'data' nie ma właściwości' redirectToLogin', to da wyjątek 'java-script' lub nie. Również jeśli użyję '' w moim pliku webconfig, wystąpi jakiekolwiek zagrożenie bezpieczeństwa, chociaż sprawdzę sesję użytkownika wewnątrz wszystkich handlerów. –

+1

@krshekhar Możesz łatwo zwrócić ciąg znaków taki jak "ko" lub inną flagę, jest to łatwe do rozwiązania. – Aristos

Powiązane problemy