Impossible de mettre à jour le cookie dans ASP.NET
Je suis aller écrous à ce sujet. Je peux écrire un cookie, puis lisez à nouveau. Mais à un certain point, je veux mettre à jour la valeur qu'il détient. Chaque fois que je reçois le cookie de nouveau, j'obtiens la valeur initiale, et non pas la mise à jour. Ci-dessous le code que j'utilise pour rédiger/mettre à jour et lire des cookies.
private static HttpCookie WriteCookie(Guid siteId, string siteName)
{
var cookie = HttpContext.Current.Request.Cookies.Get("UserSettings");
if(cookie != null) {
cookie.Value = EncryptObject(new UserSettingsModel { SiteID = siteId, SiteName = siteName });
HttpContext.Current.Response.Cookies.Set(cookie);
}else {
cookie = new HttpCookie("UserSettings") { Path = "/", Expires = DateTime.Now.AddDays(1), Value = EncryptObject(new UserSettingsModel { SiteID = siteId, SiteName = siteName }) };
HttpContext.Current.Response.Cookies.Add(cookie);
}
return cookie;
}
public static UserSettingsModel GetUserSettings(string username = null)
{
var cookie = HttpContext.Current.Request.Cookies.Get("UserSettings");
if (cookie == null || string.IsNullOrEmpty(cookie.Value))
{
cookie = ResetUserSettings();
}
var userSettings = DecryptObject<UserSettingsModel>(cookie.Value);
if (userSettings != null)
{
var siteId = userSettings.SiteID;
var siteName = userSettings.SiteName;
return new UserSettingsModel { SiteID = siteId, SiteName = siteName };
}
throw new SecurityException("You have no site attached to your user. Contact an administrtor.");
}
GetUserSettings
retourne toujours la valeur que le cookie a été initialement créé avec. Quel est le problème?
EDIT:
J'ai essayé d'appeler WriteCookie directement à partir d'une méthode dans un Contrôleur. Le cookie a été défini. J'ai l'habitude appelé WriteCookie via une requête Ajax. Maintenant, dois-je vraiment écrire le cookie à l'aide de JavaScript, ou puis-je, en quelque sorte, le faire en utilisant WriteCookie?
Merci!
source d'informationauteur Andreas
Vous devez vous connecter pour publier un commentaire.
Essayer comme ceci:
Mais je pense que votre problème est que vous appelez la
WriteCookie
méthode et laGetUserSettings
méthode dans la même requête HTTP qui ne fonctionne pas comme vous pourriez penser qu'il serait ou que vous pensez qu'il.La
WriteCookie
écrit le cookie Réponse de sorte qu'il est disponible sur les demandes ultérieures mais laGetUserSettings
lit le cookie de l' Demande de sorte que vous obtenez la valeur du cookie qui a été initialement définie lorsque cette demande a été engagée, qui bien sûr est l'ancienne valeur. Donc, après l'appel de laWriteCookie
pour mettre à jour la valeur de l'utilisateur paramètres de cookies, à réaliser une redirection et que sur la demande ultérieure, utilisez leGetUserSettings
méthode.Aussi dans ASP.NET MVC en général, vous ne voulez pas utiliser la statique
HttpContext.Current
objet, mais utiliser les abstractions que ce cadre offre à vous. Je sais que vous avez écrit ces 2 méthodes statiques, mais vous devriez avoir écrit comme une extension de la méthode à laHttpContextBase
objet par exemple. De cette façon, vous pourriez avoir appelé n'importe où où vous avez eu une instance de cette classe de base abstraite qui ASP.NET MVC vous offre dans de nombreux lieux communs au cours de la durée de vie d'une requête HTTP.