Délai d'expiration de Session dans le site web.XML

j'essaie de comprendre le véritable but de la configuration de session dans le Web.xml d'expiration de la session.

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

permettez-moi maintenant de vous parler de ma question.

mon application importe/télécharge A.le fichier txt, qui prendra sûrement plus d'une heure, puisqu'il y a des millions de documents à importer. Mais la séance se termine après 1 heure, bien que mon application importe toujours cela .fichier txt qui est en cours. Une telle application ne doit pas être à l'arrêt car l'application fait une tâche dans l'arrière-plan.

60
demandé sur unicorn2 2013-03-13 14:36:16

12 réponses

pour définir une session-timeout qui n'expire jamais n'est pas souhaitable parce que vous seriez fiable sur l'utilisateur d'appuyer sur le bouton de déconnexion chaque fois qu'il est terminé pour empêcher votre serveur de trop de charge (en fonction de la quantité d'utilisateurs et le matériel). De plus il y a quelques problèmes de sécurité que vous pourriez rencontrer, vous préférez éviter.

la raison pour laquelle la session est invalidée alors que le serveur travaille encore sur une tâche est qu'il n'y a pas communication entre le côté client (navigateur de l'utilisateur) et le côté serveur via, par exemple, une requête http. Par conséquent, le serveur ne peut pas connaître l'état de l'utilisateur, pense qu'il tourne au ralenti et invalide la session après l'heure définie dans votre web.xml .

Pour contourner cela, vous avez plusieurs possibilités:

  • on pourrait ping back-end et pendant que la tâche est en cours d'exécution pour toucher la session et l'empêcher d'être expiré
  • augmente le <session-timeout> à l'intérieur du serveur mais je ne recommande pas ce
  • exécutez votre tâche dans un thread dédié qui touche (étend) la session tout en travaillant ou informe l'utilisateur lorsque le thread est terminé

une question similaire a été posée, peut-être Pouvez-vous adapter certaines parties de cette solution dans votre projet. Regardez ce .

Espérons que cette aide, amusez-vous!

39
répondu SimonSez 2017-05-23 12:26:37
<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

vous pouvez utiliser" -1 " lorsque la session n'expire jamais. Puisque vous ne savez pas combien de temps il faudra pour le fil à compléter.

32
répondu user1262479 2013-03-13 10:44:17

envoie des requêtes Http AJAX au serveur périodiquement (disons une fois toutes les 60 secondes) par javascript pour maintenir la session avec le serveur jusqu'à ce que le téléchargement de fichier soit terminé.

9
répondu user2039408 2013-03-13 11:55:27

Hacky:

vous pouvez augmenter le temps d'arrêt programmatique de la session quand un grand up-/download est attendu.

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

Lorsque le processus se termine, vous pouvez définir le délai d'attente par défaut.

mais.. lorsque vous êtes sur Java EE, et que le téléchargement ne prend pas une heure complète, la meilleure façon est d'exécuter les tâches asynchrones (via JMS par exemple).

9
répondu vhunsicker 2015-02-03 13:54:13
<session-config>
        <session-timeout>-1</session-timeout>
</session-config>

dans le code ci-dessus "60" stands for the minutes. la session expirera après 60 minutes. donc si vous voulez plus de temps. Par Exemple -1 qui est décrit votre session n'expire jamais.

7
répondu Adalarasan_Serangulam 2013-03-13 11:33:47

le docs dit:

l'élément session-timeout définit l'intervalle de temps de session par défaut pour toutes les sessions créées dans cette application web. Le délai spécifié doit être exprimée en un nombre entier de minutes. Si le délai est de 0 ou moins, le conteneur assure que le comportement par défaut des sessions n'est jamais de temporiser. Si cet élément n'est pas spécifié, le conteneur doit définir son délai par défaut.

5
répondu Rubens Mariuzzo 2015-10-27 19:03:46

vous pouvez voir beaucoup d'options comme réponse à votre question, cependant vous pouvez utiliser" -1 " où la session n'expire jamais. Puisque vous ne savez pas combien de temps il faudra pour le fil à compléter. Par exemple:

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

Ou si vous ne voulez pas un délai d'attente qui se passe dans un but:

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

une Autre option pourrait être d'augmenter le nombre de 1000, etc, etc, bla, bla, bla.

Mais si vous voulez vraiment arrêter et vous considérer qui est inutile pour votre demande de forcer l'utilisateur à se déconnecter, il suffit d'ajouter un bouton de déconnexion et l'utilisateur de décider quand partir.

voici ce que vous pouvez faire pour résoudre le problème si vous n'avez pas besoin de forcer à se déconnecter, et dans vous chargez des fichiers qui pourraient prendre le temps de base sur le serveur et votre vitesse de l'ordinateur et la taille du fichier.

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

il suffit de le commenter ou supprimé c'est tout! Tan tararantan, tan tan tan!

4
répondu S. Mayol 2017-09-25 19:57:31

vous pouvez déclarer le temps de deux façons pour ce problème..

1) soit donner trop de temps que votre lecture de dossier est complète dans l'intervalle.

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

2)déclarez le temps qui n'expire jamais votre session.

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>
3
répondu Mitul Maheshwari 2014-02-04 06:10:39

une autre option que je recommande est de créer une demande distincte qui est apatride et qui prendrait le gros dossier. Sur votre application principale, ouvrez une nouvelle fenêtre ou iframe qui acceptera le fichier et l'enverra par cette fenêtre, puis masquez la fenêtre ou iframe une fois que le téléchargement a commencé en utilisant Javascript.

1
répondu Archimedes Trajano 2015-04-16 17:32:09

Si vous ne voulez pas un délai d'attente qui se passe dans un but:

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

Devrait entraîner aucun délai d'attente -> infini

0
répondu Jeevan Patil 2013-03-13 10:45:48

vous devriez envisager de diviser le gros fichier en morceaux et compter sur les capacités de filetage multi pour traiter plus d'un fichier à la fois OU laissez l'ensemble du processus exécuter comme une tâche de fond en utilisant TimerTask et écrivez une autre requête pour connaître l'état de celui-ci forme le navigateur, y compris une barre de progression peut être affiché si vous pouvez connaître le temps de processus d'un fichier ou d'un enregistrement.

0
répondu Prashant 2017-03-24 04:22:58

habituellement, la session n'expire pas lorsque le traitement de la demande est en cours. Je pense qu'il y a une LB ou quelque chose entre les deux qui lit tout le fichier et ensuite invoque le conteneur web.

cela pourrait causer un retard qui conduit à l'expiration de la session.

-2
répondu Ramesh PVK 2013-03-13 17:55:12