Session TimeOut dans web.xml

J’essaie de comprendre le but réel de la configuration de session dans Web.xml pour l’expiration de la session.

  60  

Maintenant laissez-moi vous parler de ma question.

Mon application importe / télécharge un fichier .txt, qui peut prendre plus d’une heure, car des millions d’enregistrements doivent être importés. Mais la session expire après 1 heure bien que mon application importe toujours ce fichier .txt en cours. Une telle application ne doit pas expirer car l’application effectue certaines tâches en arrière-plan.

Définir un délai d’expiration de session qui n’expire jamais n’est pas souhaitable car vous seriez sûr que l’utilisateur appuie sur le bouton de déconnexion à chaque fois qu’il a fini d’empêcher votre serveur de surcharger (en fonction du nombre d’utilisateurs et du matériel). De plus, il y a des problèmes de sécurité que vous pourriez rencontrer, que vous préféreriez éviter.

La raison pour laquelle la session est invalidée pendant que le serveur travaille toujours sur une tâche est qu’il n’ya aucune communication entre le client (navigateur d’utilisateurs) et le côté serveur, par exemple via une requête http. Par conséquent, le serveur ne peut pas connaître l’état des utilisateurs, pense qu’il est inactif et invalide la session après le délai défini dans votre web.xml .

Pour contourner ce problème, vous avez plusieurs possibilités:

  • Vous pouvez faire un ping sur votre backend pendant que la tâche est en cours d’exécution pour toucher la session et empêcher son expiration
  • augmenter le à l’intérieur du serveur, mais je ne recommanderais pas cette
  • exécutez votre tâche dans un thread dédié qui touche (étend) la session tout en travaillant ou avertit l’utilisateur lorsque le thread est terminé

Une question similaire a été posée, peut-être que vous pouvez adapter certaines parties de cette solution à votre projet. Regardez ça .

J’espère que ça aide, amusez-vous!

  -1  

Vous pouvez utiliser “-1” où la session n’expire jamais. Comme vous ne savez pas combien de temps il faudra pour que le thread se termine.

Envoyez périodiquement des requêtes HTTP AJAX au serveur (par exemple une fois toutes les 60 secondes) via javascript pour maintenir la session avec le serveur jusqu’à ce que le téléchargement du fichier soit terminé.

Façon hacky:

Vous pouvez augmenter le délai d’expiration de la session par programmation lorsqu’un grand téléchargement est attendu.

 session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS) 

À la fin du processus, vous pouvez rétablir le délai par défaut.

Mais quand vous êtes sur Java EE et que le téléchargement ne prend pas une heure complète, le meilleur moyen était d’exécuter les tâches asynchrones (via JMS par exemple).

  -1  

Dans le code ci-dessus "60" stands for the minutes. La session expirera après 60 minutes. Donc, si vous voulez plus de temps. Pour l’exemple -1 décrit, votre session n’expire jamais.

Le document dit:

L’élément session-timeout définit l’intervalle de délai d’attente de session par défaut pour toutes les sessions créées dans cette application Web. Le délai d’attente spécifié doit être exprimé en nombre entier de minutes. Si le délai d’attente est inférieur ou égal à 0, le conteneur garantit que le comportement par défaut des sessions n’est jamais dépassé. Si cet élément n’est pas spécifié, le conteneur doit définir son délai d’expiration par défaut.

Vous pouvez voir de nombreuses options comme réponse à votre question, mais vous pouvez utiliser “-1” où la session n’expire jamais. Comme vous ne savez pas combien de temps il faudra pour que le thread se termine. Par exemple:

   -1  

Ou si vous ne souhaitez pas qu’un délai d’attente soit atteint dans un but précis:

  0  

Une autre option pourrait être d’augmenter le nombre à 1000, etc., etc., bla, bla, bla.

Mais si vous voulez vraiment vous arrêter et que vous estimez inutile que votre application force l’utilisateur à se déconnecter, ajoutez simplement un bouton de déconnexion et l’utilisateur décidera quand partir.

Voici ce que vous pouvez faire pour résoudre le problème si vous n’avez pas besoin de forcer la déconnexion et que vous chargez des fichiers qui peuvent prendre du temps sur le serveur, la vitesse de votre ordinateur et la taille du fichier.

   

Juste commenter ou supprimer c’est tout! Tan tararantan, bronzage!

vous pouvez déclarer l’heure de deux manières pour ce problème.

1) soit accorder trop de temps pour que la lecture de votre fichier soit terminée entre les deux.

   1000   

2) déclarer l’heure qui n’expire jamais votre session.

  -1  

Une autre option que je recommanderais est de créer une application distincte sans état qui prendrait le fichier volumineux. Sur votre application principale, ouvrez une nouvelle fenêtre ou une iframe qui acceptera le fichier et l’enverra par cette fenêtre, puis cachera la fenêtre ou l’iframe une fois que le téléchargement aura commencé avec Javascript.

Si vous ne souhaitez pas qu’un délai d’attente se produise dans un but précis:

  0  

Devrait aboutir à aucun délai d’attente -> infini

Vous devez envisager de fractionner le fichier volumineux en blocs et d’utiliser des fonctionnalités multi-thread pour traiter plusieurs fichiers à la fois OU laisser le processus s’exécuter en tâche de fond à l’aide de TimerTask et écrire une requête pour connaître son statut dans le navigateur. une barre de progression peut être affichée si vous pouvez connaître le temps de traitement d’un fichier ou d’un enregistrement.

Habituellement, la session n’expire pas lorsque le traitement de la demande est en cours. Je pense qu’il y a un LB ou quelque chose entre les deux qui lit le fichier entier et appelle ensuite le conteneur Web.

Cela peut causer un retard qui mène à l’expiration de la session.