2010-06-11 8 views

Odpowiedz

15

Session.Abandon() zakończy bieżącą sesję. Session_End zostanie wyrzucony, a następne żądanie wywoła zdarzenie Session_Start.

Session.Clear po prostu wyczyści dane sesji, a sesja pozostanie przy życiu.

Identyfikator sesji pozostanie taki sam w obu przypadkach, o ile przeglądarka nie zostanie zamknięta.

W skrócie:

Session.Abandon(); anuluje bieżący Session.

Session.Clear(); kasuje wszystkie wartości ze stanu Session.

0
Session.Abandon() 

zniszczy/zabije całą sesję.

Session.Clear() 

usuwa/usuwa dane sesji (tj. Klucze i wartości z bieżącej sesji), ale sesja będzie żyła.

Porównaj metodę Session.Abandon(), Session.Clear() nie tworzy nowej sesji, po prostu powoduje, że wszystkie zmienne w sesji mają wartość NULL.

Identyfikator sesji pozostanie taki sam w obu przypadkach, o ile przeglądarka nie zostanie zamknięta.

0

Niektóre rzeczy zauważyć tutaj z mojego doświadczenia:

Session.Abandon() nie unieważnia bieżącej sesji. Stare żądania są wykonywane poprawnie, jeśli je odtwarzasz.

Ale po wywołaniu tego, ustawienie zawartości opuszczonego słownika sesji nie ma stałego efektu. Kolejne żądanie otrzyma nowy słownik sesji (nawet jeśli użyjesz tego samego identyfikatora sesji przez powtórzenie poprzedniego żądania) i żadna z twoich poprzednich zmian (po wywołaniu metody) nie istnieje.

Wydaje się więc, że Session.Abandon() całkowicie zatrzymuje trwałość całej sesji, podczas gdy Session.Clear() usuwa tylko swoje dane.

A także, jeśli potrzebujesz zabezpieczyć swoją aplikację przed atakami powtórek, powinieneś dodać logikę, która sprawdza poprawność sesji i nie zależy od żadnej z tych wbudowanych metod. Te wydają się być przeznaczone tylko do zarządzania trwałością danych sesji, a nie do zabezpieczania aplikacji.

Powiązane problemy