2010-03-23 15 views
6

Natknąłem się dzisiaj na dziwne zachowanie w mojej aplikacji internetowej. Gdy przechodzę z jednej strony na drugą, tracę dane dotyczące konkretnej sesji.Dane sesji ASP.Net utracone między stronami

Jestem w stanie uruchomić aplikację w firefox i zobaczyć, że dane sesji nie zostaną utracone.

Używam Response.Redirect(page2, false) do przekierowania na inną stronę.

poniższy kod został wykorzystany do śledzenia zmiennych sesji

System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\test.txt", true); 
for (int i = 0; i < Session.Count; i++) 
{ 
sw.WriteLine(Session.Keys[i] + " " + Session.Contents[i]); 
} 
sw.Close(); 

Czy ktoś może mi pomóc w tym? Każda pomoc jest doceniana.

+0

Witaj w SO, poświęć kilka minut na przeczytanie FAQ i dokumentacji Markdown (przydatna synchronizacja jest dostępna w prawym marginesie podczas edycji pytania). – AnthonyWJones

+0

Co dokładnie się dzieje i jak można wyświetlić zmienne sesji po stronie serwera po stronie klienta (firefox)? Czego dokładnie używasz i czy sprawdziłeś plik web.config, aby upewnić się, że limit czasu sesji nie wynosi 0? –

Odpowiedz

0

Czy projektujesz w środowisku farmy internetowej/ogrodu internetowego?

+0

Nie rozwijam się w środowisku farmy internetowej/ogrodu sieciowego – Ananth

0

Spróbuj użyć urządzenia state server mode. W zależności od sposobu skonfigurowania puli aplikacji i wdrożenia domyślny tryb przetwarzania może być nieprzewidywalny.

+0

Mogę wypróbować tryb serwera stanu, ale ponieważ ten kod (w trybie InProc) był przez długi czas i obecny również w 3 innych środowiskach, nie mogę go zmienić. Ale nie mam pojęcia, dlaczego ten problem pojawia się teraz. – Ananth

+0

Co z ciasteczkami? Obejrzyj go za pomocą fiddlera i/lub obserwuj identyfikator sesji zmian. – ziya

3

Miałem dokładnie ten sam problem iw moim przypadku znalazłem przyczynę tego zachowania. Okazało się, że podczas wywoływania metody Response.Redirect() użyłem pełnego adresu URL zamiast samej nazwy strony. Kiedy byłem w localhost/myapp/page1.aspx, przekierowałem do MYMACHINENAME/myapp/page2.aspx i dlatego sesje były różne dla każdej strony. Poprawiłem to w moim kodzie używając tylko "page2.aspx", a następnie końcowy URL w dowolnej przeglądarce (IE, firefox) był localhost/myapp/page2.aspx. Nie wiem, czy grasz z adresami URL tak jak ja robił to, ale może ta odpowiedź może dać ci wskazówkę. Dzięki i kodowanie

0

Mój problem przedstawia się następująco: -

Problem: Kiedy zostały przeniesione aplikacji ASP.NET do innego serwera (Windows Server 2008 R2) z IIS 7.5, aplikacja nie może przenieść wartości sesji między stronami. na przykład wartość sesji została ustawiona na pierwszej stronie, ale nie mogła przejść do następnej strony. Na następnej stronie wartość dla tej samej zmiennej sesji zbliżała się do NULL.

Wartości sesji przesuwały się na następną stronę w przypadku Google Chrome i Firefox, ale nie w Internet Explorerze.

Rozdzielczość: stworzyliśmy nazwę URL z "_" (podkreśleniem), np. http://MySite_test.com. Po usunięciu "_" działa w razie potrzeby, np. http://MySitetest.com

Inne możliwe rozwiązanie:

  1. Zastosowanie Response.Redirect z konieczności drugi parametr jako „false”, aby uniknąć wykonanie strony, a tym samym uniknąć tracą sesji tokena. Musisz użyć adresu URL w następujący sposób. Response.Redirect ("NextPage.aspx", false)

  2. Jeśli pula aplikacji witryny jest skonfigurowana jako farma sieci lub ogród sieciowy (ustawiając maksymalną liczbę procesów roboczych na więcej niż jeden) i jeśli nie używasz sesji sesji lub sesji SQL, przychodzące żądania nieprzewidywalnie przejdą do jednego z procesów roboczych, a jeśli nie jest to ten, na którym została utworzona sesja, zostanie utracona. Rozwiązaniem tego problemu jest albo nie korzystanie z ogrodu internetowego, jeśli nie potrzebujesz zwiększenia wydajności, albo skorzystaj z jednego z dostawców poza procesem.

Powiązane problemy