5

To może być głupie/kulawe pytanie, szczególnie po tak długiej pracy z ASP.NET :), ale muszę być tego pewien.Czy sesja ASP.NET może trwać dłużej niż aplikacja

Czy jest możliwe, aby sesja (czyli sesja ASP.NET) przeszła dłużej niż aplikacja (instancja aplikacji/domena aplikacji/zmienna aplikacji)?

Innymi słowy, jeśli Application_End jest wywoływana w pliku Global.asax, oznacza to, że nie będzie więcej aktywnej sesji? a każde nowe żądanie spowoduje Application_Start, a następnie nowe Session_Start?

Uwaga: sesja nie zawsze musi być InProc, sesja może znajdować się na serwerze stanowym lub serwerze SQL.

Odpowiedz

5

Dzięki stanu sesji domyślny InProc, aplikacja zostanie zakończona, gdy ostatnia sesja wygasła, w którym pojawia się punkt Application_End. W tym scenariuszu cały appDomain jest zburzony, a cała pamięć zwolniona. Ponieważ sesje są utrzymywane w pamięci, są trwale niszczone w tym momencie i dlatego nigdy nie mogą żyć dłużej niż życie aplikacji.

Jeśli używana jest Sql Server lub State Server, gdzie sesja jest przechowywana na oddzielnym komputerze, to po jej zerwaniu sesje mogą być kontynuowane. Następnie, ponieważ klient zachowuje oryginalny plik cookie sesji w przeglądarce, następnym razem, gdy odwiedzają witrynę, sesja jest restartowana, a sessionid służy do identyfikowania ich istniejącej sesji.

+0

Szukam scenariusza z innej strony. Co się stanie, jeśli aplikacja się zakończy (powiedzmy, restartując IIS lub przetwarzając recykling itp.), Czy sesja będzie nadal aktywna? –

+1

Jeśli przechowujesz sesję w bazie danych lub na serwerze stanowym, to tak, klient nadal będzie miał plik cookie sesji. Tak więc przy następnej wizycie i uruchomieniu aplikacji ich sesja może zostać wznowiona (ponieważ dane sesji nadal występują w stosunku do sesji). – TheCodeKing

+0

Hmm, dzięki. Próbowałem zapisać pewne informacje dotyczące sesji w aplikacji (zmienna statyczna). Ale wygląda na to, że nie możemy zagwarantować, że zmienna statyczna zawsze będzie miała wartość dla każdej aktywnej sesji. To jest smutne :( –

4

Tak, kiedy można umieścić stan w SQL Server aplikacja mogła uruchomić ponownie, ale będzie nadal utrzymać stan sesji

+0

Ta odpowiedź jest również poprawna. Dzięki –

Powiązane problemy