Bonjour à tous, je voudrai savoir si c'est "dangereux" ou à ne surtout pas faire de mettre un session Timeout très long (ex : 10h) ou es ce qu'il vaut mieux utiliser des cookies ou autres ?
Merci d'avance
Bonjour à tous, je voudrai savoir si c'est "dangereux" ou à ne surtout pas faire de mettre un session Timeout très long (ex : 10h) ou es ce qu'il vaut mieux utiliser des cookies ou autres ?
Merci d'avance
Bonjour,
C'est dangereux oui. Tu risques, selon le nombre d'utilisateurs et ce que tu stockes dans ta session, de faire crasher ton server IIS à cause de la mémoire.
Ce que tu peux faire c'est de stocker ta Session sur SQLServer par exemple. Il existe de nombreux tutos sur ce sujet.
Mais pour répondre à ta question, oui il est possible de mettre le Timeout à 10h. La valeur maximale est de 525 600 minutes (365 jours x 24 heures x 60 minutes).
En espérant t'avoir aidé.
Je suis pas sur SQLServer mais sur MySql, on peut faire la même chose ?
Et les allers-retours serveur -> base de données ne vont pas saturer le serveur non plus ?
Dans ce cas tu peux utiliser le mode State Server ou encore utiliser ton propre provider pour stocker la session (Custom storage provider). Je t'invite à consulter cet article sur les différents modes.
Mais avant de faire compliqué, peux-tu indiquer pourquoi tu as besoin d'une telle durée et qu'est ce que tu souhaites stocker en Session. Il y a surement moyen de faire autrement, ou alors il y a un problème de conception.
Enfaite dans mon espace membre (authentifier par session), le visiteur peut créer des commandes, mais si entre le moment de l'ouverture de la page de création de commande et le clique sur le bouton Valider il se passe un temps assez grand (supérieur au TimeOut), la session d'authentification sera écouler et donc j'enregistre pas la commande et je redirige vers le formulaire de connexion. Donc l'internaute aura tout perdu.
Je sais pas si j'ai été assez clair ?
J'avais pensé à faire un "Timer aJax" qui viens sauvegarder le travail toutes les n minutes, mais bon je vais surcharger mon serveur aussi.
N'hésitez pas à me proposer une solution, y a surement une erreur de conception à la base.
Ok, donc l'idée est de garder en mémoire un panier, sans pour autant que le client valide celui-ci.
Si ton panier est une liste d'objet avec quelques champs (c'est à dire : ça ne prend pas beaucoup en mémoire), là tu peux mettre un Session Timeout de plusieurs heures).
Sinon, tu utilises le mode State Server pour stocker ta Session (ou un Custome storage provider).
Enfin, il te reste la solution d'enregistrer au fûr et à mesure ton panier dans ta base MySQL, rien de compliqué.
Je t'invite aussi à consulter les nombreux articles sur la gestion d'un panier en ASP.NET. Tu as un exemple parmi tant d'autres ici, tu as aussi des codes sources sur Codeplex. Enfin, pense à consulter les articles en anglais.
En espérant t'avoir aidé.
Pour essayer j'ai fais ça :
Mais au bout d'un certain temps, maximum 5 minutes, la session est quand même "null".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Session.Timeout = 480; Session.Add("idSociete", reader.GetString("ID"));
Comment ça se fait ?
Non, le viewstate est sérialisé et stocké dans le source de ta page
Ou as-tu mis ces infos, dans ta page ?
De tête, changer le timeout de session ne fonctionnera que dans l'évènement session.start..autant le mettre dans le web.config
Sinon, tu as plein de raisons qui peuvent faire que ta session part en cacahouète, surtout si tu utilise le mode inproc pour le stockage de ta session...ceci dit, si tu te poses encore la question, c'est probablement que tu n'es pas allé lire les liens postés dans les messages précédents, ce que je t'invite à faire au plus tot
J'ai placé le réglage du timeout dans le web.config et le probleme est toujours le même en mode Inproc.
J'ai lu le lien sur les états des sessions, et je n'arrive pas à mettre en place l'état "stateServer", je n'arrive a trouver l'attribut "stateConnectionString" de mon hébergeur. J'ai un héberment mutualisé chez Ikoula, si quelqu'un sais comment le régler ?
Partager