Zalogowanego użytkownika można zapisać:
- w klasie rozszerzającej UI jako pole, ale kiedy ktoś otworzy kolejną zakładkę z tym samym adresem to tworzy nam się nowa instancja UI, w której już nie mamy informacji o zalogowanym użytkowniku na innej karcie, ale przecież tej samej sesji, więc jest to złe rozwiązanie.
Wydaje się więc, że najlepiej zapisać taką informację w danych sesji. Nie wiem jednak gdzie zapisać najlepiej i jakie są różnice?:
this.getSession().getSession().setAttribute("loggedUser", user);
this.getSession().setAttribute("loggedUser", user);
this.getSession().getService().getCurrentRequest().setAttribute("loggedUser", user);
this.getSession().getService().getCurrentRequest().getWrappedSession().setAttribute("loggedUser", user);
W programie lubię zapisywać też w logach ID sesji, ale nie ma czegoś takiego jak:
this.getSession().getId();
Jest tylko:
this.getSession().getSession().getId();
Jest jeszcze kwestia “kasowania/zamykania” sesji i związanych z nią danych Dobrze przeczytałem, że jeżeli trzymamy coś w:
this.getSession().setAttribute(“loggedUser”, user);
To zamykamy: this.getSession().close();
A jeśli trzymamy dane tak: this.getSession().getSession().setAttribute(“loggedUser”, user); to zamykamy:
this.getSession().getSession().invalidate();
Mógłby ktoś krótko też opowiedzieć czym te wszystkie sposoby się różnią, kiedy jest tworzony dany typ sesji i czy ta sama sesja obejmuje otwarcie w innej karcie.
Ostatni mały niuans. Jak się orietnuję nie ma różnicy między:
this.getSession().getSession().setAttribute("loggedUser", user);
a
this.getUI().getSession().getSession().setAttribute("loggedUser", user);
itd. dla pozostałych przkładów.