2010-04-22 6 views
6

Czy można zaktualizować wartość plików cookie ASP.NET bez konieczności aktualizowania czasu wygaśnięcia? Zauważyłem, że jeśli spróbuję zaktualizować plik Cookie bez aktualizowania daty wygaśnięcia, plik cookie już nie istnieje. Mam następujący kod, który próbuję zmodyfikować. Jaki jest sens wygaśnięcia, jeśli za każdym razem, gdy wartość pliku cookie jest aktualizowana, tak samo jest z datą wygaśnięcia?Wartość aktualizacji pliku cookie ASP.NET bez aktualizacji wygasania?

 HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 

     if (cookie == null) 
      cookie = new HttpCookie(constantCookie); 

     cookie.Expires = DateTime.Now.AddYears(1); 
     cookie.Value = openClose; 
     HttpContext.Current.Response.Cookies.Set(cookie); 
+2

„Jaki jest sens o wygaśnięciu, jeśli za każdym razem, gdy wartość pliku cookie jest aktualizowana, tak samo jest z datą wygaśnięcia? " - Właściwie to właśnie tego chcesz. Scenariusze takie jak "jeśli nie odwiedzasz miesiąca, o którym zapomnimy o tobie", zależą od tego, że za każdym razem, gdy odwiedzasz cookie, wygasa miesiąc. –

+0

To prawda, zdecydowanie na tym się zgadzam. – aherrick

Odpowiedz

5

programu ASP.NET klasa HttpCookie nie może zainicjować Wygasa własność po przeczytaniu w pliku cookie z żądania HTTP (od specyfikacji HTTP nie wymaga klientowi nawet wysłać wartość wygaśnięcia do serwera w pierwsze miejsce). A jeśli nie ustawisz właściwości Expires przed ponownym ustawieniem pliku cookie w odpowiedzi HTTP, wówczas zostanie on zmieniony na sesyjny plik cookie, a nie stały.

Jeśli naprawdę musisz zachować datę wygaśnięcia, możesz ustawić datę wygaśnięcia jako część wartości cookie, a następnie po odczytaniu pliku cookie przeanalizuj wartość i ustaw nową datę wygaśnięcia.

Przykładem, który nie zawiera żadnych innych danych tak cookie nie jest bardzo pomocny - trzeba by go serializacji jakoś z rzeczywistymi danymi chcesz zapisać:

HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 
DateTime expires = DateTime.Now.AddYears(1); 

if (cookie == null) { 
    cookie = new HttpCookie(constantCookie); 
} else { 
    // cookie.Value would have to be deserialized if it had real data 
    expires = DateTime.Parse(cookie.Value); 
} 

cookie.Expires = expires; 
// save the original expiration back to the cookie value; if you want to store 
// more than just that piece of data, you would have to serialize this with the 
// actual data to store 
cookie.Value = expires.ToString(); 

HttpContext.Current.Response.Cookies.Set(cookie); 
+2

Dobra odpowiedź, chociaż nie jest to tylko ASP.NET, który nie inicjalizuje daty wygaśnięcia - ogólnie rzecz biorąc, data wygaśnięcia ciasteczek jest "tylko do zapisu" i nie jest publikowana na serwerze internetowym w żądaniach http. – maxp

+0

Dla mnie, chociaż po stronie serwera wartość wygasła cookie nie pokazuje ostatniej ustawionej wartości, ale przeglądarka przechowuje poprawną wartość, nawet jeśli po prostu zaktualizuję wartość cookie, a nie wygasa. –

+0

@mrbengi Ten post dotyczy plików cookie. Napisałeś nowe pytanie o to, jak działa analiza pór dnia. Istnieje wiele źródeł, w których można znaleźć pomoc lub zadać nowe pytanie za pośrednictwem linku w prawym górnym rogu strony StackOverflow. Ale twój komentarz nie dotyczy tego tematu. –

Powiązane problemy