/ / Dziwne wylogowanie na stronie ASP.NET 3.5 - asp.net, .net, vb.net, sesja, .net-3.5

Dziwne wylogowywanie się na stronie ASP.NET 3.5 - asp.net, .net, vb.net, sesja, .net-3.5

Proszę, pomóżcie mi, zaczynam tutaj desperacko próbować znaleźć problem i nie wiem, gdzie zacząć go szukać.

Oto objawy:

Zauważyłem, że kiedy użytkownik loguje się rano, jest on natychmiast wylogowywany, a kiedy ponownie się loguje, wszystko jest w porządku i może pracować na stronie.

Od czasu do czasu, gdy użytkownik kliknie link, ładowanie strony zajmuje dużo czasu, ale nigdy nie ładuje się, a użytkownik jest rzucany na stronę logowania.

Ponadto, po wystąpieniu wyjątku na stronie internetowej, użytkownik jest następnie rzucany na stronę logowania. To tak, jakby wyjątek czyścił sesję.

Czy ktokolwiek z was wie o sytuacji, w której to może się zdarzyć?

Kod, którego używam na każdej stronie w mojej aplikacji jest następujący:

If (Not User.Identity.IsAuthenticated) Then
Response.Redirect("../login2.aspx")
End If

" If session timeout then return to login screen "
If ((Session("LocationId") Is DBNull.Value) Or (Session("LocationId") Is Nothing))
Then
Response.Redirect("../login2.aspx")
End If

Kod w pliku web.config:

<sessionState cookieless="false" timeout="600" />
<authentication mode="Forms">
<forms timeout="600" />
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>

Odpowiedzi:

1 dla odpowiedzi № 1

Dlaczego używasz tego kodu na każdej stronie?

Uwierzytelnianie i uwierzytelnianie .NET zwykle zajmuje się tymi wszystkimi rzeczami, jeśli masz je poprawnie skonfigurowane.


1 dla odpowiedzi nr 2

Powiązane z tym scenariuszem * `

".... po wystąpieniu wyjątku na stronie internetowej jest wtedy użytkownik wyrzucony na stronę logowania. To tak, jakby wyjątek czyści w jakiś sposób sesja

Wiem o jednej możliwej sytuacji, w której może wystąpić. Jest to daleko idące, zwłaszcza w scenicznej produkcji z wielu powodów, ale widziałem, jak to się stało :-)

Jeśli sesja jest w pamięci i rejestrowanie jest zakończonepisząc do pliku dziennika, który znajduje się w katalogu Bin aplikacji, może to nastąpić, ponieważ modyfikowanie folderu bin aplikacji sieci Web powoduje ponowne uruchomienie aplikacji, czyli utratę sesji w pamięci.

Tylko jeden możliwy scenariusz. Jeśli twoja sesja nie jest w pamięci LUB twój mechanizm logowania nie jest taki, to to nie dotyczy ciebie.


0 dla odpowiedzi № 3

Zwracam się do wszystkich ekspertów od sieci dot, ponieważ jestem naprawdę zdesperowany,

pozwól mi podać kolejny symptom problemu, ponieważ wciąż trwa,

serwer to bardzo silny serwer - intel xeon z 3-bitowym ramkiem, więc prawdopodobnie nie jest to problem zasobów.

Gdy użytkownik korzysta z systemu w sposób ciągłynie stanowi problemu i może pracować swobodnie, problem powstaje, gdy użytkownik opuszcza komputer (lub aplikację), aż do 5 minut, a następnie, gdy chce kontynuować pracę i klika łącze w aplikacji, którą rzuca. do strony logowania. kiedy próbuje zalogować się ponownie, jej się to udaje, ale po kliknięciu innego łącza zostaje wyrzucona ponownie, a kiedy zaloguje się, może pracować swobodnie i wszystko jest w porządku.

W jakiś sposób sesja jest czyszczona, gdy strona jest bezczynna. Podkreślam, że tak się nie dzieje, gdy uruchomię aplikację w visual studio, tylko w iis.

Aplikacja została przekonwertowana z asp.net 2.0 na 3.5,

to wszystko, dziękuję


0 dla odpowiedzi nr 4

Przede wszystkim musisz odmówić dostępu nieuwierzytelnionym (anonimowym) użytkownikom:

<authorization>
<deny users="?" />
</authorization>

Czy skonfigurowałeś domyślne strony logowania?

<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" defaultUrl="Default.aspx" slidingExpiration="true" timeout="30" />
</authentication>

name ustawia nazwę pliku cookie, przydatny, jeśli użyjesz wbudowanej infrastruktury zabezpieczeń .NET 2.0 (role, członkostwo itp.)

slidingExpiration włączone normalne zachowanie limitu czasu - dowolne działanie użytkownika resetuje limit czasu


0 dla odpowiedzi № 5

Jeśli używasz zwykłej sesjifunkcjonalność w asp.net Uważam, że sesja wygasa po 15-30 minutach bezczynności (zwykle nie używam sesji, więc pamiętam, że jest gdzieś w tym zakresie) .Każdy odświeżenie na serwerze resetuje ten timer, więc jeśli użytkownik aktywnie robi rzeczy, a potem nie osiągną tego czasu.

Ta strona zajmuje dużo czasunajprawdopodobniej z powodu recyklingu procesów roboczych i że użytkownik jest pierwszym użytkownikiem, który uzyskuje dostęp do witryny po przetworzeniu, co powoduje, że IIS wykonuje całą kompilację, a następnie wyświetla stronę powodującą opóźnienie. Dzieje się tak tylko w przypadku pierwszego odwiedzający po przetworzeniu procesu roboczego.Możesz zmienić to zachowanie w usługach IIS tak, aby działał zgodnie z terminarzem, a nie po upływie określonego czasu bez aktywności. Spowoduje to, że proces roboczy zajmie więcej pamięci, więc w zależności od środowiska może nie być dobrą zmianą.

EDYTOWAĆ: Powinienem dodać, że wysłany przez Ciebie kod wyjaśnia dokładnie, dlaczego użytkownik jest kopany z powrotem na stronę logowania. Sprawdza, czy w sesji jest coś, a jeśli nic tam nie ma, to odsyła użytkownika do strony logowania, więc jeśli są nieaktywni przez zbyt długi czas sesji, oznacza to, że jest ona wyczyszczona, i użytkownik jest kopany z powrotem do strony logowania za pomocą twojego kodu, a także powinieneś użyć FormsAuthentication.RedirectToLoginPage (); do przekierowania zamiast Response.Redirect.Tak po zalogowaniu się wracają do strony, której zażądali pierwotnie.