Czy używam odpowiedzi podczas zdarzenia strony (np. Obciążenia), ponieważ jest to odpowiedź z programu ASP.NET i żądanie po naciśnięciu przycisku, ponieważ jest to odpowiedź na przejście do ASP.NET w celu przetworzenia? Czy może jest coś więcej?Kiedy używać Request.Cookies przez Response.Cookies?
Odpowiedz
W aplikacji internetowej żądanie pochodzi z przeglądarki, a odpowiedź jest tym, co serwer odsyła. Podczas sprawdzania poprawności plików cookie lub plików cookie z przeglądarki, należy użyć Request.Cookies. Kiedy tworzysz pliki cookie do wysłania do przeglądarki, musisz dodać je do Response.Cookies.
Są to 2 różne rzeczy, jedna oszczędza [odpowiedzi], drugi CZYTA [Request]
w pliku cookie (informatyki mówiąc) :) zapisać mały plik do okresie czas który zawiera obiekt typu strun
w ramach .NET ty save a cookie robi:
HttpCookie myCookie = new HttpCookie("MyTestCookie");
DateTime now = DateTime.Now;
// Set the cookie value.
myCookie.Value = now.ToString();
// Set the cookie expiration date.
myCookie.Expires = now.AddMinutes(1);
// Add the cookie.
Response.Cookies.Add(myCookie);
Response.Write("<p> The cookie has been written.");
Napisałeś plik cookie, który będzie dostępny przez minutę ... zazwyczaj robimy teraz .AddMonth (1), dzięki czemu możesz zapisać plik cookie przez cały miesiąc.
Aby retrieve a cookie, należy użyć życzenie (żądasz), takich jak:
HttpCookie myCookie = new HttpCookie("MyTestCookie");
myCookie = Request.Cookies["MyTestCookie"];
// Read the cookie information and display it.
if (myCookie != null)
Response.Write("<p>"+ myCookie.Name + "<p>"+ myCookie.Value);
else
Response.Write("not found");
Pamiętaj:
Aby usunąć ciasteczka, nie ma bezpośredniego kod, sztuką jest Zapisz tę samą nazwę pliku cookie z datą ważności, która już minęła, na przykład .AddMinuty (-1)
spowoduje to usunięcie pliku cookie.
Jak widać, za każdym razem, gdy wygasa czas życia pliku cookie, plik ten jest automatycznie usuwany z systemu.
Pliki cookie pochodzą z przeglądarki w kolekcji Request.Cookies. Tam czytasz wysłane ciasteczka.
Aby wysłać pliki cookie z powrotem do przeglądarki, umieść je w kolekcji Response.Cookies.
Jeśli chcesz usunąć plik cookie, musisz powiadomić przeglądarkę, aby go usunąć, wysyłając plik cookie z datą ważności, która minęła. Przeglądarka używa czasu lokalnego komputera klienckiego, więc jeśli używasz czasu serwera do utworzenia daty, pamiętaj, aby odjąć co najmniej jeden dzień, aby upewnić się, że faktycznie upłynął czas lokalny klienta.
Podczas pisania pliku cookie użyj opcji Odpowiedź, ale czytanie może zależeć od Twojej sytuacji. Zwykle czytasz z Żądania, ale jeśli twoja aplikacja próbuje uzyskać plik cookie, który został właśnie napisany lub zaktualizowany, a podróż w obie strony do przeglądarki nie nastąpiła, być może będziesz musiał przeczytać ją z formularza Odpowiedź.
Używam tego wzoru przez pewien czas i działa dobrze dla mnie.
public void WriteCookie(string name, string value)
{
var cookie = new HttpCookie(name, value);
HttpContext.Current.Response.Cookies.Set(cookie);
}
public string ReadCookie(string name)
{
if (HttpContext.Current.Response.Cookies.AllKeys.Contains(name))
{
var cookie = HttpContext.Current.Response.Cookies[name];
return cookie.Value;
}
if (HttpContext.Current.Request.Cookies.AllKeys.Contains(name))
{
var cookie = HttpContext.Current.Request.Cookies[name];
return cookie.Value;
}
return null;
}
Alternatywnym, ale jednakowym podejściem byłoby po prostu zapisanie pliku cookie do kolekcji Response.Cookies AND Request.Cookies podczas zapisywania. W ten sposób każda kolejna logika w cyklu może odczytać plik cookie, który właśnie ustawiłeś, nie zaglądając do obiektu Response. – Chris
Chris, zgodził się i ja to robiłem, ale ostatnio przeczytałem, że modyfikowanie obiektu Request jest nie-nie. Spróbuję znaleźć odniesienie. – andleer
Dzięki, Chris. Andrew - chciałbym zobaczyć to odniesienie. Na razie idę z rozwiązaniem Chrisa. – catfood
Kiedy tworzę lub aktualizuję plik cookie w .NET i zwykle robię to zarówno w zbiorze plików cookie żądania i odpowiedzi. W ten sposób możesz być pewien, że jeśli spróbujesz odczytać plik cookie w dalszej kolejności, uzyskasz poprawne informacje.
Alex, ten szczególny problem dokuczał mi przez cały dzień. Dzięki za to, że to wyczyścisz! – catfood
Tak, istnieje kilka interesujących zachowań, w których ustawienie pliku cookie w odpowiedzi spowoduje również ustawienie go w Żądaniu, jeśli jeszcze nie istniało. Ale jeśli już istniało w Żądaniu, ustawienie Odpowiedź NIE aktualizuje Żądania. Wygląda więc na to, że funkcja ma być pomocna, ale nieco niespójna. Z pewnością podczas modyfikowania wielu plików cookie w tym samym żądaniu można uruchomić błędy. – AaronLS
Kod Andrzeja zgłosił błąd w metodzie "AllKeys.Contains". Więc poprawiłem trochę ..
public void WriteCookie(string strCookieName, string strCookieValue)
{
var hcCookie = new HttpCookie(strCookieName, strCookieValue);
HttpContext.Current.Response.Cookies.Set(hcCookie);
}
public string ReadCookie(string strCookieName)
{
foreach (string strCookie in HttpContext.Current.Response.Cookies.AllKeys)
{
if (strCookie == strCookieName)
{
return HttpContext.Current.Response.Cookies[strCookie].Value;
}
}
foreach (string strCookie in HttpContext.Current.Request.Cookies.AllKeys)
{
if (strCookie == strCookieName)
{
return HttpContext.Current.Request.Cookies[strCookie].Value;
}
}
return null;
}
Czy pamiętasz o włączeniu System.Linq? Spowoduje to naprawienie błędu w moim pliku. – chocojosh
Jeśli jest to tylko mały błąd, lepiej zaproponować zmianę oryginalnego wpisu przed skopiowaniem odpowiedzi. – Spontifixus
- 1. Kiedy używać sprężynowego przepływu przez sprężynę mvc
- 2. Kiedy używać node.js i kiedy używać ajax?
- 3. kiedy używać zadania i kiedy używać wątku?
- 4. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 5. Golang: kiedy używać wskaźników
- 6. Kiedy używać LEFT JOIN i kiedy używać INNER JOIN?
- 7. Kiedy używać widoków tekstur
- 8. Mysql: kiedy używać wyzwalaczy
- 9. Kiedy używać Formatera wartości i kiedy używać Resolvera wartości
- 10. PHP: Kiedy używać funkcji i kiedy używać metod statycznych?
- 11. Kiedy używać undef_method i kiedy używać metody remove_method?
- 12. Kiedy używać komponentów Seaside i kiedy używać prostych obiektów renderowania?
- 13. Kiedy używać tablicy bajtów i kiedy używać strumienia?
- 14. Konwencja dotycząca celu C: kiedy używać i kiedy używać z
- 15. Kiedy należy używać JCR i kiedy należy używać JPA/RDBMS?
- 16. Kiedy używać Class.isInstance() i kiedy używać operatora instanceof?
- 17. Kiedy używać Requirejs i kiedy używać dołączonego javascript?
- 18. Kiedy używać JMS i kiedy używać usługi REST?
- 19. Kiedy używać algorytmów genetycznych a kiedy używać sieci neuronowych?
- 20. Kiedy używać klienta boto3 i kiedy używać zasobu Boto3?
- 21. Kiedy używać czystej rekursji i kiedy używać pętli/recur?
- 22. Kiedy używać dup i kiedy używać klonu w Ruby?
- 23. Kiedy NIE używać MVVM?
- 24. C++: kiedy używać wskaźników?
- 25. Kiedy używać StringBuilder?
- 26. Kiedy należy używać _aligned_malloc()?
- 27. Kiedy używać języka Processing?
- 28. Kiedy używać kontenera IOC?
- 29. Kiedy używać NSEnumerationConcurrent
- 30. Kiedy używać Akka Microkernel?
+1 Nie zdawałem sobie sprawy trzeba było ponownie zapisać plik cookie, aby zaktualizować upływem – Andrew
+1 jeszcze jasne proste wyjaśnienie –
Było to możliwe głównie pomocny, ale nieco mylące, ponieważ w twoim przykładzie, kiedy przejdziesz do pobrania pliku cookie, faktycznie nadpisujesz plik cookie, który był wcześniej zapisany w linii 'HttpCookie myCookie = new HttpCookie (" MyTestCookie ");' Zamiast tego użyj czegoś takiego jak 'HttpCookie myCookie = new HttpCookie (" MyWrittenCookie ") ; ' –