2010-02-05 14 views
7

Mam witrynę ASP.NET 2.0, która przechowuje identyfikator użytkownika w sesji w celu wskazania, że ​​są one zalogowane. W niektórych sytuacjach użytkownik nie wydaje się być zalogowany. byli monitorowania ruchu w Skrzypek, a niektóre szczegóły Znalazłem:Plik cookie sesji ASP.net utracony lub usunięty

  • problem jest w 100% powtarzalne na starszym laptopie kopalni, gdy uruchomiony IE7 i laptopa kierownika projektu, gdy uruchomiony IE7. Problem nigdy nie występuje na moim obecnym laptopie z uruchomionym IE7 lub żadnym z tych laptopów podczas uruchamiania FF.
  • Problem występuje tylko w produkcji - nie w fazie rozwoju, wewnętrznej inscenizacji ani w ocenie klienta. Produkcja jest jedynym zrównoważonym obciążeniem środowiska, ale powtarzalność opisana powyżej sprawia, że ​​kwestionuję równoważenie obciążenia jako czynnik.
  • Gdy strona, która ustawia Sesję ("ID") = 1, wysyła odpowiedź do klienta, widzę we wszystkich przypadkach nagłówek "Set-Cookie", który tworzy plik cookie ASP.Net_Session_Id (i jest to HttpOnly).
  • Kolejne zapytania do serwera wyślą ten plik cookie w nagłówku na komputerach, które nie wykazują problemu, ale nie na komputerach, które są, więc albo plik cookie jest usuwany, albo nagłówek "Set-Cookie" jest ignorowany.
  • Sposób logowania jest następujący: strona na stronie www.DomainX.com ma element iframe. Źródłem tego elementu iframe jest strona w witrynie login.DomainY.com. Różnorodność stron obsługiwanych przez login.DomainY.com prowadzi użytkownika przez proces logowania/rejestracji. Ostatnim krokiem logowania.DomainY.com jest przekierowanie do strony z powrotem na www.DomainX.com, w tym identyfikator użytkownika w querystring. Ta strona na stronie www.DomainX.com zazwyczaj przechowuje identyfikator w sesji, a następnie uruchamia niektóre JS w celu przekierowania dokumentu najwyższego poziomu do nowej strony, co powoduje usunięcie użytkownika z elementu iframe. Jest to proces, który działał przez kilka lat z kilkoma wartościami domeny DomainX.com. Jedną rzeczą, która może być inna, jest to, że w tym przypadku JS po prostu niszczy element iframe, a niektóre zawierają elementy div.
  • Kolejna różnica między scenariuszami, w których występuje problem, a których nie ma w plikach cookie Google Analytics. Istnieje różnica, gdy login.DomainY.com/FinalStep.aspx przekierowuje na stronę www.DomainX.com/SaveTheID.aspx wewnątrz elementu iframe. Gdy problem nie występuje, żądanie SaveTheID.aspx zawiera różne pliki cookie Google Analytics (__utma, __utmz, itp.). Gdy problem wystąpi, to żądanie nie obejmuje wszystkich plików cookie GA (brakuje go __utma, __utmz i __utmb).
  • Produkcja to jedyne środowisko, w którym login.DomainY.com działa pod SSL, więc pomyślałem, że to może być powiązane. Ale tymczasowo skonfigurowaliśmy naszą kopię roboczą login.DomainY.com, aby używać protokołu SSL, a to nie miało żadnego efektu.

Jakieś pomysły, które mogą to powodować?

Edytuj: środowisko produkcyjne ma domeny domen: www.DomainX.com i DomainX.com. Istnieje inny znany problem z brakiem ustawienia plików cookie dla obu tych domen. Możliwe, że jest to powiązane, ale nie będę w stanie przetestować, dopóki ta poprawka nie pójdzie do skutku.

+0

Czy spojrzał na ruch sieciowy z Skrzypek - http://www.fiddler2.com/ - to doskonałe narzędzie dla sprawdzanie, jaki ruch jest przesyłany między serwerem a przeglądarką, w tym pliki cookie itp., i czy można go skonfigurować do deszyfrowania ruchu HTTPS? –

+0

Tak, robię to; Skrzypek jest moim głównym źródłem informacji o tym, co wiem w tym momencie. W każdym razie dzięki. – Joel

Odpowiedz

4

Będziesz chciał rzucić okiem na swojego dostawcę stanu sesji, aby sprawdzić, czy będzie działać na dwóch serwerach/instancjach aplikacji .net. Jeśli są ustawione na przykład na inProc, to na pewno wpadniesz na ten problem, ponieważ każda sesja będzie powiązana z wątkiem, w którym została utworzona. Zamiast tego chcesz to zedukować albo do usługi stanu asp.net, do której mają dostęp oba komputery, albo jeszcze lepiej, powinieneś użyć rozproszonego rozwiązania do buforowania, takiego jak projekt Microsoft Velocity, który rozdzieli sesje na dwa urządzenia, na wypadek, gdyby jeden z nich przestał działać.

Niektóre inne sposoby radzenia sobie z tym problemem to używanie lepkich sesji w systemie równoważenia obciążenia (niezalecane) lub przejście do sesji bez plików cookie, która działałaby, ale może powodować pewne bóle głowy w kodzie.

W naszej firmie mamy serwer pierwotny i pomocniczy z rozproszoną pamięcią podręczną, która po przejściu jednej maszyny może przejąć drugą. Ta sama zasada odnosi się do równoważenia obciążenia, a gdy zaczniesz mieć więcej niż jeden komputer lub nawet więcej niż jedną instancję w puli aplikacji, będziesz musiał to zakodować.

Jeśli używasz Velocity do sesji upewnij się, że pamięć podręczna, którą wybrałeś do przechowywania twoich sesji, nie jest ekwiwalentna.

+0

Czy możesz wyjaśnić, dlaczego nie zaleca się używania lepkich sesji w systemie równoważenia obciążenia? Zawsze myślałem, że to dobry pomysł. – Jacob

+1

Lepkie sesje powodują, że żądanie przechodzi do tego samego serwera przez cały czas. Oznacza to, że jeśli serwer ulegnie awarii, to żądanie nie zostanie przekierowane. Jeśli zostanie zmieniony, sesja zostanie utracona, chyba że program ma wbudowaną redundancję dla stanu sesji i tym podobne. Sesje nieprzylepne zmuszają do tworzenia nadmiarowości w aplikacji i projektowania jej w celu skalowania, a także obsługi awarii węzła. Wreszcie nieprzywierające sesje pozwalają routerowi zarządzać ruchem bardziej optymalnie. Żądania są rozłożone bardziej równomiernie między węzłami, ponieważ nie ma znaczenia, które pole zawiera żądanie. – Middletone

0

Myślę, że Middletone ma rację, z wyjątkiem: nie wyjaśnia, dlaczego problem nie może zostać naprawiony w Firefoksie. System równoważenia obciążenia jest podejrzany o numerze 1; dobrze byłoby sprawdzić, czy ma alibi, wyłączając wszystkie serwery aplikacji poza trybem offline (jeśli to możliwe, w czasie, gdy może obsłużyć obciążenie) i sprawdzić, czy problem nadal istnieje. Jeśli tak, to nie jest równoważnikiem obciążenia i możesz zacząć szukać gdzie indziej. Jeśli nie, jest to równoważnik obciążenia.

Przy okazji: Przyklejone sesje są złe, ponieważ sesje, które się na nich znajdują, nie są chronione przez nadmiarowość. Ponadto moduł równoważenia obciążenia nie może być dystrybuowany do serwera o najmniejszym obciążeniu w określonym momencie, może jedynie zdecydować na początku sesji, a następnie utrzymywać użytkownika w miejscu, w którym się on znajduje.

Jeśli okaże się, że masz problem z modułem równoważenia obciążenia, pierwszą rzeczą, którą powinienem zrobić, to włączyć się do sesji, a następnie poszukać innego rozwiązania z kojącym tłem roboczego środowiska produkcyjnego.

0

strzelać, muszę straciłam ciasteczko i zdolność do udzielenia odpowiedzi i edytować ...

zrobiłem zbadać równoważenia obciążenia jako kwestii trochę modyfikując mój plik hosts zwrócić bezpośrednio do adresów IP każdego serwerów internetowych, a to nie miało żadnego efektu. Wydaje mi się, że personel IT klienta będzie się powstrzymywał od prośby o wyłączenie równoważenia obciążenia.

Mamy oddzielny serwer państwowy, który działa od kilku lat w innych witrynach hostowanych przez te same serwery. Niekoniecznie bez problemów, ale bez problemu takiego.

Jako zespół pomocy, jestem obecnie testuje inne mechanizmy oporność ...

Powiązane problemy