8721 sujets

Développement web côté serveur, CMS

Bonjour,
contexte :
je travail avec des formulaires très long, les utilisateurs restent donc pendant plusieurs minutes sur une page sans effectuer d'aller/retour serveur. Lorsqu'ils appuient sur le bouton enregistrer; il arrive que leurs sessions soient expirées et donc l'enregistrement ne s'effectue pas comme il le devrait.
Ma solution :
On set un interval sur la durée de la T-1 de la session, et on enregistre le timespan d'arrivé de l'utilisateur sur la page, dans une variable JS TlastAction.
Lorsque l'utilisateur réalise un clique ou une action clavier on met à jour TlastAction.
Dans la fonction qui traite l'interval si la dernière action a été effectué il y a moins de N minutes alors envoie un aller/retour serveur en ajax qui relance la session.
Ma question :
Ce comportement est-il correct ou voyez vous des contraintes/limitations qui rendraient cette solution non viable ?
Pourquoi ma question :
Ce n'est pas habituellement un comportement que l'on rencontre sur le web.
Modifié par Su4p (26 Dec 2013 - 14:38)
Modérateur
Bonjour,

j'ai déjà eu affaire à des solutions de ce genre, notamment sur des intranets ou des applications web.

Selon les situations je vois 3 moyens d'obtenir une solution dans ce cas de figure, le choix se fait selon la situation:

1) Raccourcir les formulaires, faire des formulaires multi-pages, ce qui permet aussi de pré-sauver facilement le formulaire, et d'éviter de perdre un travail de longue durée.
2) étendre la durée de session du serveur.
3) étendre la session par du javascript/ajax. Il peut être intéressant de se pencher aussi sur l'API de visibilité des page: http://www.w3.org/TR/page-visibility et le support: http://caniuse.com/pagevisibility
Je ne vois pas de gros problème à prolonger artificiellement la session en faisant une requête AJAX à intervalles réguliers.

Par contre je suis d'avis qu'examiner les entrées/sorties pour retarder l'appel automatique ne sert pas à grand chose. Ca va transformer ton script à priori ultra simple en usine à gaz inutilement.

En principe ça ne mange pas de pain de faire une requête toutes les 5-10 minutes tant que la page est ouverte et peu importe ce qu'il se passe.

Par contre en fonctionnalité utile pendant que tu y es, tu pourrais profiter de cet appel obligatoire pour sauvegarder automatiquement le formulaire incomplet. Parce que perdre le mail ou le post qu'on a pris 1h à écrire en plein milieu de la rédaction, c'est particulièrement frustrant par exemple...

Scinder le fomulaire en plusieurs pages successives, c'est une solution certes sans besoin d'AJAX, mais ce n'est pas forcément approprié dans tous les cas. C'est bien si les étapes sont clairement définies et bien expliquées, mais ça peut être pénalisant de ne pas avoir une vue d'ensemble de toutes les données à fournir dès le départ. Par exemple pour de l'administratif, ça peut être pénible de se rendre compte seulement au milieu de la procédure qu'il nous manque un document. A prendre au cas par cas et avec des pincettes donc... ou alors il faut que l'utilisateur soit toujours en mesure d'interrompre et de reprendre à n'importe quel moment, sans jamais rien perdre, et dans des sessions éventuellement différentes. et ça c'est pas forcément simple.

La solution de prolonger la durée des sessions sur le serveur, ça se configure en 5 minutes, mais ce n'est pas forcément bon non plus. Ca donne potentiellement plus de chances aux attaques. Mais bon là encore ça dépend du contexte, si ce n'est pas des données bancaires, officielles ou très confidencielles, ça peut être acceptable. En même temps il faut quand même se dire qu'il y aura toujours quelqu'un pour être suffisament lent pour que la session saute quand même.