Setzen Sie die Sitzung in Jsp ohne Ungültigmachen zurück

8

Ich möchte die Sitzung in einer JSP-Seite zurücksetzen, ohne sie ungültig zu machen. Der Grund dafür ist, dass der Benutzer eine bereits geöffnete Seite hat, die die Sitzung verwendet, und wenn er ungültig wird, würde er NullPointerException werfen. Da eine neue Sitzung bereits eingefangen wurde, möchte ich kein zusätzliches Schlagwort hinzufügen. Das Ziel ist, alle Attribute zu bereinigen.

Ich suche nach etwas wie:

%Vor%

wäre eine Alternative (?)

%Vor%

Aber ich bin mir nicht sicher, ob dadurch einige notwendige Session-Attribute wie Login-Daten gelöscht werden.

Gibt es einen schönen Weg, dies zu tun?

Bearbeiten: Die beste Lösung wäre, dass Sie jedes Mal, wenn Sie eine bestimmte Seite öffnen, eine neue Sitzung für dieses Fenster / diese Registerkarte erstellen, bis Sie die Registerkarte schließen oder diese Seite auf dieser Registerkarte erneut aufrufen. Diese Frage ist durch den Versuch aufgetreten, dieses Problem zu lösen / p>     

ctst 02.02.2016, 14:47
quelle

3 Antworten

4

Ja, es gibt einen schönen Weg, dies zu tun. Erstellen Sie eine Klasse, die das Objekt HttpSession umschließt und eine Map -Schnittstelle implementiert. In der Implementierung können Sie Sitzungsattribute ohne Ungültigkeit der Sitzung bearbeiten. Ähnlich wie der implementierte Code für SessionMap im Struts2-Framework. Sie können hier die Dokumentations-Seite für SessionMap lesen .

  

Eine einfache Implementierung der Map -Schnittstelle für eine Sammlung von   HTTP-Sitzungsattribute Die Methode entrySet() zählt alle auf   Sitzungsattribute und erstellt Set der Einträge. Beachten Sie, das wird auftreten   träge - nur wenn der Eintrag gefragt wird.

Ähnliche Implementierung von SessionMap finden Sie in JSF. Auf der Dokumentations-Seite finden Sie hier .

%Vor%      

Siehe auch:        javax.faces.context.ExternalContext#getSessionMap()

Wenn Sie eines dieser Frameworks verwenden, können Sie die Methode clear() verwenden oder überschreiben, um das gewünschte Ergebnis zu erhalten.

    
Roman C 09.02.2016, 15:12
quelle
3

Die Http API eindeutig nicht solche Funktion nicht bieten .

Die obige Schleife ein wenig geschrieben werden könnte schöner die Java5 Iterator Idiom mit:

%Vor%

Aber das erfordert die Enumeration iterable sein.

Was ich mich wundere: Sie möchten alle Sitzungsdaten löschen, aber die Sitzung trotzdem so behalten, dass ein anderer Kontrolllauf, der scheinbar die Sitzung verwendet, nicht abstürzt. Funktioniert das wirklich? Der zweite Kontrolllauf wird keine Sitzungsdaten finden, wie Sie vollständig die Sitzung gelöscht haben werden.

Ich glaube, einer von denen ist wahr:

  1. Ihre Sitzungsbereinigung entfernt Daten, die für den zweiten Kontrolllauf benötigt werden
  2. wäre es besser, die Sitzung zu entkräften und den Steuer-Lauf zu ermöglichen, mit einer für ungültig erklärte Sitzung zu behandeln.

Die HttpSession-Dokumentation besagt eindeutig, dass jede Entität, die die Sitzung verwendet, in der Lage sein muss, mit der Tatsache umzugehen, dass eine Sitzung verloren geht oder überhaupt nicht existiert, daher sollte Punkt 2 sowieso implementiert werden.

Im Sinne von extendiblity (was passiert, wenn Daten von anderen Prozessen in Ihrer Sitzung sind? Ihre Schleife würde sie auch löschen) Ich schlage vor, anstatt die gesamte Sitzung zu löschen, behalten Sie die Sitzungswerte Ihrer Kontrolle im Auge -run und löschen Sie nur diese expliziten Werte.

    
penguineer 02.02.2016 15:50
quelle
1

Sie können diesen Trick verwenden, wie wir die Werte in Sitzung

festgelegt haben %Vor%

Anstatt das gesamte Sitzungsobjekt zurückzusetzen, setzen Sie einfach einige leere Werte auf die Sitzungsparameter, so dass es null ist und session Object wird keine NullPointerException auslösen.

zum Beispiel

%Vor%     
Prabakaran Mathi 11.02.2016 06:04
quelle

Tags und Links