Time-out sessie in web.xml

Ik probeer het echte doel van sessieconfiguratie in Web.xml voor sessietime-out te begrijpen.

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

Laat me je nu iets vertellen over mijn vraag.

Mijn toepassing is bezig met het importeren/uploaden van een .txt-bestand, wat zeker meer dan 1 uur zal duren, aangezien er miljoenen records moeten worden geïmporteerd.
Maar de sessie verloopt na 1 uur, hoewel mijn toepassing nog steeds dat .txt-bestand importeert dat aan de gang is.
Een dergelijke applicatie zou geen time-out moeten hebben, aangezien de applicatie een taak op de achtergrond uitvoert.


Antwoord 1, autoriteit 100%

Het is niet wenselijk om een sessie-time-out in te stellen die nooit verloopt, omdat je erop zou vertrouwen dat de gebruiker elke keer dat hij klaar is op de uitlogknop drukt om te voorkomen dat je server te zwaar wordt belast (afhankelijk van het aantal gebruikers en de hardware). Daarnaast zijn er enkele beveiligingsproblemen die u tegen kunt komen die u liever wilt vermijden.

De reden waarom de sessie ongeldig wordt terwijl de server nog aan een taak werkt, is omdat er geen communicatie is tussen client-side (gebruikersbrowser) en server-side via b.v. een http-verzoek. Daarom kan de server niets weten over de gebruikersstatus, denkt dat hij inactief is en maakt de sessie ongeldig na de tijd die is ingesteld in uw web.xml.

Om dit te omzeilen heb je verschillende mogelijkheden:

  • U kunt uw backend pingenterwijl de taak wordt uitgevoerd om de sessie aan te raken en te voorkomen dat deze verloopt
  • verhoog de <session-timeout>in de server, maar ik zou dit niet aanraden
  • Voer uw taak uit in een speciale draad die de sessie aanraakt (verlengt) tijdens het werken of op de hoogte brengen van de gebruiker wanneer de draad is voltooid

Er is een soortgelijke vraag gesteld, misschien kunt u delen van deze oplossing in uw project aanpassen. Kijk eens naar dit .

Ik hoop dat dit helpt, veel plezier hebben!


Antwoord 2, Autoriteit 91%

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

U kunt “-1” gebruiken waar de sessie nooit verloopt. Omdat u niet weet hoeveel tijd het zal duren voordat de thread is voltooid.


Antwoord 3, Autoriteit 21%

Send Ajax HTTP-verzoeken naar de server periodiek (zeg eenmaal voor elke 60 seconden) via JavaScript om de sessie bij te houden met de server totdat het bestand Upload is voltooid.


Antwoord 4, Autoriteit 21%

Hacky Way:

U kunt de time-out van de sessie programmatisch verhogen wanneer een grote up- / download wordt verwacht.

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

Wanneer het proces eindigt, kunt u de time-out weer instellen op zijn standaard.

Maar .. wanneer u op Java EE bent, en de up- / download niet een compleet uur duurt, was de betere manier om de taken asynchroon (via JMS E.g) uit te voeren.


Antwoord 5, Autoriteit 19%

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

In bovenstaande code staat "60" stands for the minutes.De sessie verloopt na 60 minutes.Dus als je meer tijd wilt. Bijvoorbeeld -1dat wordt beschreven, uw sessie verloopt nooit.


Antwoord 6, autoriteit 19%

U kunt veel opties zien als antwoord op uw vraag, maar u kunt “-1” gebruiken waar de sessie nooit verloopt. Omdat je niet weet hoeveel tijd het kost om de draad te voltooien. Bijv.:

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

Of als je niet wilt dat er een time-out plaatsvindt voor een bepaald doel:

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

Een andere optie zou kunnen zijn om het aantal te verhogen tot 1000, etc, etc, bla, bla, bla.

Maar als u echt wilt stoppen en u vindt dat het niet nodig is voor uw toepassing om de gebruiker te dwingen uit te loggen, voegt u gewoon een uitlogknop toe en de gebruiker beslist wanneer hij weggaat.

Hier is wat u kunt doen om het probleem op te lossen als u niet geforceerd hoeft uit te loggen en als u bestanden laadt die enige tijd kunnen duren, afhankelijk van de server en uw computersnelheid en de grootte van het bestand.

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

Gewoon reageren of verwijderen, dat is alles! Bruin tararantan, bruin bruin!


Antwoord 7, autoriteit 12%

In de documenten staat:

Het session-timeout-element definieert het standaard sessie-time-outinterval voor alle sessies die in deze webtoepassing zijn gemaakt. De opgegeven time-out moet in een geheel aantal minuten worden uitgedrukt. Als de time-out 0 of minder is, zorgt de container ervoor dat het standaard gedrag van sessies nooit time-out is. Als dit element niet is opgegeven, moet de container zijn standaard time-outperiode instellen.


Antwoord 8, Autoriteit 7%

U kunt tijd op twee manieren declareren voor dit probleem ..

1) Geef ook te lang dat uw bestandswaarde tussen die tijd voltooid is.

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

2) Verklaar tijd die nooit uw sessie verloopt.

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

Antwoord 9, Autoriteit 2%

Nog een optie die ik zou aanraden is om een ​​afzonderlijke applicatie te maken die staatloos is die het grote bestand zou nemen. Open op uw hoofd-app een nieuw venster of iframe die het bestand accepteert en verzendt het via dat venster en verberg het venster of iframe zodra het upload is gestart met het gebruik van JavaScript.


Antwoord 10

Als u niet wilt dat een time-out voor een bepaald doel is:

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

moet resulteren in helemaal geen time-out – & GT; oneindig


Antwoord 11

U moet overwegen om het grote bestand te splitsen aan chunks en vertrouwt op multi-threading-mogelijkheden om meer dan één bestand tegelijk te verwerken
OF
laat het hele proces draaien als een achtergrondtaak met behulp van TimerTask en schrijf nog een query om de status ervan te weten. De browser kan inclusief een voortgangsbalk worden getoond als je de verwerkingstijd van een bestand of record kunt weten.


Antwoord 12

Normaal gesproken verloopt de sessie niet wanneer de aanvraag wordt verwerkt. Ik denk dat er een LB of iets tussen zit dat het hele bestand leest en vervolgens de webcontainer aanroept.

Dit kan een vertraging veroorzaken waardoor de sessie verloopt.

Other episodes