Mam aplikację internetową Java, która przechowuje pewne dane w sesji. Dane w sesji zmieniają się, gdy użytkownik wchodzi w interakcję z aplikacją (np. Przepływ jest zarządzany przez kontroler, każdy kontroler ma kilka stron formularzy, na każdej stronie formularza niektóre dane są aktualizowane w sesji, a przepływ przechodzi do strony następnego formularza).Zarządzanie danymi sesji internetowej/przepływem kontrolera dla wielu kart
Problem polega na tym, że niektórzy użytkownicy otwierają do aplikacji więcej niż jedną zakładkę, a każda karta zawiera inny krok w przepływie. W tym momencie dane w sesji są pomieszane, ponieważ zakładki mają tę samą sesję (aplikacja używa sesji zarządzanych przez ciasteczka).
Nakłanianie użytkowników do korzystania z różnych przeglądarek w celu uniknięcia udostępniania tego samego identyfikatora sesji (np. Jedno okno przeglądarki Firefox i jedno okno przeglądarki Internet Explorer) nie wchodzi w grę, ponieważ w pewnym momencie ktoś o tym zapomni i zamiast tego użyje kart, a tym samym zepsuje do ich danych.
Dodanie pewnych weryfikacji, które wykrywają, że inny przepływ jest żądany z innej zakładki i wyświetla komunikat użytkownikowi mówiącemu, że to niedozwolone, również nie jest opcją, ponieważ wkurza użytkowników, a my tego nie chcemy? : D
Faktem jest, że korzystanie z innej karty jest przydatne dla użytkowników, ponieważ są bardziej wydajni w używaniu aplikacji, więc zachowuję tę opcję. Ale teraz pytanie brzmi: jak najlepiej zarządzać danymi jednej sesji dla więcej kart?
Pomyślałem, że kontroler wygeneruje token, gdy rozpocznie przepływ i przekaże ten token do każdej strony formularza, która z kolei odeśle ją do siebie. Jeśli inna karta zażąda tego samego działania kontrolera, gdy trwa ciągły przepływ, należy wygenerować kolejny token i przekazać go dookoła.
Zasadniczo chcę, aby każdy przepływ miał token iw sesji nie będę przechowywać tylko jednego zestawu danych, ale będę mieć zestaw danych dla każdego tokena, a następnie dopasowywać żądania na podstawie tokena.
Problem polega na tym, że takie podejście będzie wymagało wielu poprawek do aplikacji i zastanawiałem się, czy istnieje najlepsza praktyka w zarządzaniu taką sytuacją lub czy ktoś może zaproponować inne podejście. Jestem otwarty na pomysły.
Czy spotkałeś się z taką sytuacją? Jak sobie z tym poradziłeś?
Nie ma żadnej różnicy między używaniem oddzielnych kart i oddzielnymi oknami. Zakres sesji jest ** szeroki dla przeglądarki **, ponieważ jest zaimplementowany za pomocą plików cookie (najczęściej). Z jakiego stosu technologii korzystasz? Serwlety JSP +? JSF? –
@Matt Ball: Używam serwletów + JSP. Zaktualizowałem moje pytanie. Wiem, że sesja obejmuje całą przeglądarkę, dlatego wspomniałem o dwóch oknach jako jednym IE w drugim Firefoksie. – Gabriela
OK, to było sformułowanie _ "użyj różnych okien zamiast karty, aby uniknąć udostępniania tego samego identyfikatora sesji" _ kiedy naprawdę masz na myśli "użyj różnych przeglądarek". –