wake-up-neo.com

Session TimeOut in web.xml

Ich versuche, den eigentlichen Zweck der Sitzungskonfiguration in Web.xml für das Sitzungszeitlimit zu verstehen.

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>

Lassen Sie mich jetzt von meiner Frage erzählen.

Meine Anwendung importiert/lädt eine TXT-Datei hoch, die mehr als 1 Stunde dauert, da Millionen Datensätze importiert werden müssen .. Die Zeitüberschreitung der Sitzung dauert jedoch 1 Stunde, obwohl meine Anwendung dies immer noch importiert. txt-Datei, die gerade ausgeführt wird . Eine solche Anwendung sollte keine Zeitüberschreitung haben, da die Anwendung eine Aufgabe im Hintergrund ausführt.

61
Vineet

Es ist nicht wünschenswert, ein Sitzungszeitlimit festzulegen, das niemals abläuft. Es ist für den Benutzer nicht wünschenswert, die Schaltfläche Abmelden nach jedem Abschluß zu drücken, um die Serverlast zu stark zu belasten (abhängig von der Anzahl der Benutzer und der Hardware). Darüber hinaus gibt es einige Sicherheitsprobleme, die Sie möglicherweise vermeiden würden. 

Der Grund, warum die Sitzung für ungültig erklärt wird, während der Server noch an einer Aufgabe arbeitet, besteht darin, dass keine Kommunikation zwischen der Client-Seite (Browser des Benutzers) und der Serverseite durch, z. eine http-Anfrage. Daher kann der Server den Status des Benutzers nicht kennen, er glaubt, dass er sich im Leerlauf befindet, und macht die Sitzung nach der in Ihrem web.xml festgelegten Zeit ungültig. 

Um dies zu umgehen, haben Sie mehrere Möglichkeiten: 

  • Sie könnten Ihr Backend ping während der Task ausführen, um die Sitzung zu berühren und zu verhindern, dass die Sitzung abgelaufen ist
  • erhöhen Sie den <session-timeout> im Server, aber ich würde das nicht empfehlen
  • führen Sie Ihre Aufgabe in einem dedizierten Thread aus, der die Sitzung während der Arbeit berührt (erweitert) oder den Benutzer benachrichtigt, wenn der Thread beendet ist 

Es wurde eine ähnliche Frage gestellt, möglicherweise können Sie Teile dieser Lösung in Ihrem Projekt anpassen. Schauen Sie sich this an. 

Hoffe das hilft, viel Spaß!

40
SimonSez
<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

Sie können "-1" verwenden, wenn die Sitzung niemals abläuft. Da Sie nicht wissen, wie lange es dauert, bis der Thread abgeschlossen ist.

34
user1262479

Senden Sie AJAX HTTP-Anforderungen in regelmäßigen Abständen (beispielsweise alle 60 Sekunden) über Javascript an den Server, um die Sitzung mit dem Server aufrechtzuerhalten, bis der Upload der Datei abgeschlossen ist.

9
user2039408

Hacky Weg:

Sie können das Sitzungszeitlimit programmgesteuert erhöhen, wenn ein großer Up-/Download erwartet wird.

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

Wenn der Prozess beendet ist, können Sie das Timeout auf den Standard zurücksetzen.

Aber wenn Sie mit Java EE arbeiten und der Up-/Download-Vorgang keine volle Stunde dauert, ist es besser, die Aufgaben asynchron auszuführen (z. B. über JMS).

9
vhunsicker
<session-config>
        <session-timeout>-1</session-timeout>
</session-config>

Im obigen Code "60" stands for the minutes. Die Sitzung ist nach 60 minutes. abgelaufen. Wenn Sie also mehr Zeit benötigen. Für Beispiel -1, das beschrieben wird, läuft Ihre Sitzung niemals ab.

Die Dokumente sagen:

Das Sitzungszeitlimitelement definiert das Standardzeitlimit für Sitzungen für alle in dieser Webanwendung erstellten Sitzungen. Das angegebene Timeout muss in einer ganzen Anzahl von Minuten angegeben werden. Wenn das Zeitlimit 0 oder weniger beträgt, stellt der Container sicher, dass das Standardverhalten von Sitzungen niemals überschritten wird. Wenn dieses Element nicht angegeben ist, muss der Container seinen Standardzeitlimit festlegen.

6
Rubens Mariuzzo

Sie können viele Optionen als Antwort auf Ihre Frage anzeigen. Sie können jedoch "-1" verwenden, wenn die Sitzung niemals abläuft. Da Sie nicht wissen, wie lange es dauert, bis der Thread abgeschlossen ist. Z.B.:

   <session-config>
        <session-timeout>-1</session-timeout>
    </session-config>

Oder wenn Sie nicht möchten, dass eine Auszeit aus irgendeinem Grund geschieht:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

Eine andere Option könnte die Anzahl auf 1000 erhöhen, usw., usw., bla, bla, bla.

Wenn Sie den Vorgang jedoch wirklich beenden möchten und Sie der Meinung sind, dass Ihre Anwendung den Benutzer nicht dazu zwingt, sich abzumelden, fügen Sie einfach eine Schaltfläche zum Abmelden hinzu.

Was Sie tun können, um das Problem zu lösen, wenn Sie sich nicht abmelden müssen, und wenn Sie Dateien laden, die Zeit auf dem Server und die Geschwindigkeit Ihres Computers sowie die Dateigröße benötigen.

<!-- sets the default session timeout to 60 minutes. -->
   <!-- <session-config>
     <session-timeout>60</session-timeout>
   </session-config> -->

Einfach kommentieren oder löschen, das ist es! Tan Tararantan, Tan Tan!

5
S. Mayol

sie können die Zeit für dieses Problem auf zwei Arten angeben.

1) Geben Sie entweder zu lange Zeit, bis Ihre Datei zwischen diesen Zeitpunkten vollständig ist.

<session-config>
    <session-timeout> 1000 </session-timeout>
</session-config>

2) Geben Sie die Zeit an, die Ihre Sitzung niemals abläuft.

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>
3

Eine andere Option, die ich empfehlen würde, ist die Erstellung einer separaten Anwendung, die zustandslos ist und die große Datei übernehmen würde. Öffnen Sie in Ihrer Haupt-App ein neues Fenster oder einen neuen iframe, der die Datei akzeptiert und durch dieses Fenster sendet. Verbergen Sie dann das Fenster oder den iframe, sobald der Upload mit Javascript gestartet wurde.

1

Sie sollten die Aufteilung der großen Datei in Abschnitte in Betracht ziehen und sich auf Multi-Threading-Funktionen verlassen, um mehr als eine Datei gleichzeitig zu verarbeiten ODER Lassen Sie den gesamten Prozess als Hintergrundaufgabe mit TimerTask laufen und schreiben Sie eine weitere Abfrage, um den Status zu erfahren Davon kann der Browser einschließlich einer Fortschrittsleiste angezeigt werden, wenn Sie die Prozesszeit einer Datei oder eines Datensatzes kennen.

0
Prashant

Wenn Sie nicht möchten, dass ein Timeout aus irgendeinem Grund geschieht:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

Sollte zu keinem Timeout führen -> unendlich

0
Jeevan Patil