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
Version imprimable
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é.
C'est pas tant le panier que je veux garder en mémoire c'est surtout l'identifiant client, car il est déjà logger au moment de la saisie du "panier".
Je veux quand même garder en mémoire le panier.
Je ne peux pas déterminer la taille du "panier". Ça peut aller du simple au double.
Un panier, c'est une liste de Id product et de quantités en gros.
Je pense que t'as de la marge avant de saturer ta mémoire
Pas exactement, parce que c'est pas réellement un panier, je dois stocker :
- id produit OU libellé produit,
- quantité
- prix
- tva
- remise
ca n'a rien de monstrueux, mais si il y a beaucoup d'internaute connecté, je sais pas ce que ca peut donner.
Vous me conseilleriez quoi, le timer, le State Server ou le session timeout ?
Ce n'est pas grand chose à stocker tu sais. De plus on peut calculer aproximativement combien ça prendra.
Admettons qu'une ligne de ton panier prenne 50 octets. Chaque client met 100 produits dans son panier, et tu as 1000 clients (dont la session est active). On aura 50 * 100 * 1000 = 5.000.000 d'octets, soit 4,77 Mo :mrgreen:
Donc si je comprend bine vous me conseillez d'augmenter le session timeout ?
Je viens de penser a un truc. Es ce que stocker les données saisie pour la commande en cours dans un cookie est une mauvaise chose ?
Comme ca il pourra récupérer ses données saisies tout en ne surchargeant pas le serveur ?
[Edit : Cookie créer en JavaScript grâce a Jquery)
Certains utilisent les cookies pour stocker le panier de leur site.
Cependant, quid des users pour lesquels les cookies ne sont pas activés ?
C'est vrai que les cookies ne sont pas toujours activés.
Alors pour vous quelle serait la meilleure solution ?
Salut,
pour ajouter mon grain de sel, j'ai aussi vu des implémentations ou le panier et un id de session (ce session id etant ensuite utilisé pour retrouver des infos clients en base) étaient stocké dans le viewstate...
Après, ca peut (ou pas) correspondre à ton besoin ;)
Je ne connaissais pas le viewstate.
J'ai regarder quelques sites qui parlait de ce sujet, et si j'ai bien compris c'est un mélange entre les sessions les cookies et la persistance en base de données ?
Pour essayer j'ai fais ça :
Mais au bout d'un certain temps, maximum 5 minutes, la session est quand même "null".Code:
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