J'utilise l'état de session ASP.NET pour garder une trace de connecté à des utilisateurs connectés sur mon site.
Cependant, un problème que je rencontre est que par défaut Les cookies de session ASP.NET sont définis pour expirer lorsque le Le navigateur ferme. P>
J'ai essayé définir mon propre cookie ASP.NET_SESSIONID et modifier l'expiration de la cookie en utilisant quelque chose de similaire au code suivant: P>
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(1);
5 Réponses :
Juste une supposition: peut-être éditer la session.configuration à l'intérieur du web.config pourrait changer l'expiration de la cookie? Vous pouvez jeter un coup d'œil ici ? P>
Cela ne fonctionne pas. Le délai d'attente spécifié dans la configuration de la sessionState est uniquement applicable à la sessionStore. Pas le cookie stocké sur le navigateur.
Je vous suggérerais d'utiliser des formulaires pour suivre les utilisateurs connectés. Vous pouvez utiliser un formateur persistant pour atteindre ce que vous voulez. P>
ou si vous voulez vraiment utiliser l'état de la session, essayez cette technique . p>
L'approche FormsAuthCookie permet simplement de retourner les utilisateurs à ignorer les formulaires de connexion si elles se connectent dans une fenêtre d'heure spécifique. Il ne maintient aucun état qu'ils ont peut-être déjà créé sur le serveur.
@Chrisw - "Cela ne maintient aucun état qu'ils ont peut-être créé auparavant sur le serveur" - bien sûr que non, un tel état devrait être persisté, par exemple. à une base de données, par exemple en utilisant le profil.
Le lien vers l'article est mort (ou redirige à autre chose). Quelqu'un peut-il résumer la technique là-bas? Je ne trouve aucune autre ressource liée à cela. Merci.
@TOM, je recommanderais d'utiliser des formulateurs de maîtrise, mais je pense que l'article est disponible ici: DevProconnections. Com / Développement / Création - Persistance-ID-Cooki ES
@Joe: Merci pour une réponse rapide. Je cherche des moyens de stocker de petites quantités de données pour les utilisateurs non enregistrés. Est-il possible d'utiliser des formulaires pour les utilisateurs qui ne sont pas authentifiés également?
@ TOMPAŽOUEK - Non, vous ne pouvez pas utiliser l'authentification des formulaires pour cela. Un cookie est la solution évidente.
@Joe: Merci pour les idées. J'ai peur que l'utilisation des cookies permettrait aux utilisateurs de visualiser ou de désordre avec les valeurs. Et plutôt en essayant de mettre en œuvre une sorte de mécanismes de cryptage dans les valeurs de cookies, j'utiliserais simplement l'état de la session.
@Tom - Le cryptage des cookies serait le moyen habituel d'éviter la visualisation ou la falsification des utilisateurs. Mais si l'état de la session répond à vos exigences, cela peut être une alternative raisonnable.
@Joe: Les cookies cryptés peuvent réellement fonctionner pour moi car je n'ai pas besoin de nombreuses données stockées là-bas. Je suppose que crypter des biscuits avec quelque chose comme la machine code> ne serait pas trop difficile. Merci pour des suggestions.
@ TOMPAŽOUEK - Oui, le cryptage avec la machine est facile (et que l'utilisation d'autres API de cryptage standard n'est pas difficile non plus). Sachez simplement que dans un environnement de ferme Web, vous devez utiliser la même machine à manchette sur tous les serveurs de la ferme: msdn.microsoft.com/en-us/library/...
Je pense essayer de garder la session en vie pendant longtemps est la mauvaise approche et limite votre évolutivité. Le cookie de session pointe vers une session spécifique qui est conservée par IIS sur le serveur. En général, vous Si vous souhaitez conserver un État utilisateur après la fermeture de son navigateur, vous pouvez toujours regarder quelque chose comme
Je suis confronté à ce problème avec un panier d'achat, mais je prévoyais d'utiliser l'ID de session pour les utilisateurs non enregistrés, votre dernière suggestion ne correspondra pas à la facture. Toute autre idée?
@Drazenbjelovuk: Je suis confronté au même problème, j'ai un panier d'achat dans la base de données et je voulais en réserver une référence dans la session des utilisateurs non enregistrés. Puis-je demander comment avez-vous résolu le problème? Aucune suggestion? Merci.
@ Tompažouek Salut Tom. J'ai fini par utiliser un cookie distinct représentant un ID généré aléatoirement d'un enregistrement de panier temporaire nouvellement créé dans la base de données, avec un champ d'expiration défini sur la même valeur que l'expiration de la cookie. Lors de l'inscription, les produits de ce panier (représenté dans une table de chariots) auraient simplement leur champ d'UserID précédemment vide défini sur l'ID du compte utilisateur nouvellement créé et l'enregistrement de panier temporaire supprimé. ERD Snippet .
@Drazenbjelovuk: Merci d'avoir partagé, on dirait que cela pourrait être une bonne approche.
Basé sur des liens dans la réponse de Joe, j'ai compris cette approche: Ce code peut être inséré dans global.asax.cs code>. p>. p>
La réponse de Tom a presque travaillé pour moi, à l'exception de la mise en place du cookie dans une variable et de la fixation de ses propriétés. Je devais définir les propriétés de l'objet directement comme:
HttpContext.Current.Response.Cookies["ASP.NET_SessionId"].Expires = expiryDate; HttpContext.Current.Response.Cookies["ASP.NET_SessionId"].HttpOnly = true; HttpContext.Current.Response.Cookies["ASP.NET_SessionId"].Value = sessionState.SessionID;