Ich habe Cookies verwendet, um nicht vertrauliche Daten über Sitzungen hinweg zu teilen. Ich möchte einige lastUsedEntity (ein Zeichenfolgenliteral) aus der aktuellen Sitzung beim Benutzerprotokollierungsereignis speichern, damit diese Entität bei der nächsten Anmeldesitzung gelesen/verwendet werden kann. Die genannte Entität gehört zu einer Session-Bean meiner Anwendung.Wie werden Daten aus einer alten Sitzung in der nächsten Sitzung verwendet?
Ich beschloss, diese Entität in @PreDestroy
Methode der Session-Bean zu extrahieren und zu speichern. Die Methode wurde erfolgreich beim Sitzungszeitlimit der Anwendung ausgeführt. Das Speichern des Cookies ist fehlgeschlagen, weil FacesContext.getCurrentInstance()
in der @PreDestroy
-Methode null war, möglicherweise weil der JSF-Lebenszyklus-Anforderungs-Antwort-Zyklus bis dahin abgeschlossen wurde. Ich versuchte, FacesContext.getCurrentInstance()
in @PostContruct
Methode meiner Sitzungsbohne zu cachen, damit ich auf faces Kontext zwischengespeicherte Instanz zurückgreifen konnte, aber dann sah ich ein anderes Problem java.lang.IllegalStateException at com.sun.faces.context.FacesContextImpl.assertNotReleased, weil ich FacesContext als Instanzvariable meiner Sitzungszielklasse verwendete. Ich würde mich freuen, wenn ich hier ein paar Fragen stellen oder eine bessere Idee haben könnte, um meine alten Sitzungsdaten für die weitere Verwendung in diesem Szenario beizubehalten.
Bisher habe ich gemacht, wie Sie sagten, setzen Cookie auf jeder Seite laden (oder Anfrage). Ich arbeite in einer mehrseitigen App. Jede Seite mit einer eigenen ID. Eine Seite leitet beim Abmelden zur Anmeldeseite um. Ich habe Cookie gesetzt mit einem Schlüssel namens "lastOpenedId" in 'PostConstruct' Methode nach der Landung auf jeder' ViewScoped' Seite. Diese ID stammt von einer sitzungsbezogenen Service-Bean. Aber ich musste es ändern, da ich eigentlich "lastExpiredId" speichern muss, d. H. Ich muss die ID einer Seite protokollieren, die aufgrund eines Sitzungszeitlimits ausgeloggt wurde. – user2918640
Speichern Sie es in der DB. – BalusC
Das ist, was ich als letzten Ausweg gedacht habe, es sei denn, ich könnte mir etwas einfallen lassen, das auf Web-Framework-Ebene gemacht werden könnte. – user2918640