Je ne joue généralement pas avec les cookies, mais je voulais examiner celui-ci par rapport aux variables de session que j'utilise généralement.Les cookies ne sont pas réglés rapidement
Si je mets un cookie, alors essayez immédiatement de le lire, je ne récupère pas la valeur que je viens de définir. Cependant, si je rafraîchis la page ou ferme le navigateur et l'ouvre de nouveau, le cookie semble être réglé.
Je débogue dans Chrome. Cela fera-t-il une différence?
public const string COOKIE = "CompanyCookie1";
private const int TIMEOUT = 10;
private string Cookie1 {
get {
HttpCookie cookie = Request.Cookies[COOKIE];
if (cookie != null) {
TimeSpan span = (cookie.Expires - DateTime.Now);
if (span.Minutes < TIMEOUT) {
string value = cookie.Value;
if (!String.IsNullOrEmpty(value)) {
string[] split = value.Split('=');
return split[split.Length - 1];
}
return cookie.Value;
}
}
return null;
}
set {
HttpCookie cookie = new HttpCookie(COOKIE);
cookie[COOKIE] = value;
int minutes = String.IsNullOrEmpty(value) ? -1 : TIMEOUT;
cookie.Expires = DateTime.Now.AddMinutes(minutes);
Response.Cookies.Add(cookie);
}
}
Voici comment je l'utilise:
public Employee ActiveEmployee {
get {
string num = Request.QueryString["num"];
string empNum = String.IsNullOrEmpty(num) ? Cookie1 : num;
return GetActiveEmployee(empNum);
}
set {
Cookie1 = (value != null) ? value.Badge : null;
}
}
Voici comment je l'appelle, où Request.QueryString["num"]
retours NULL afin que Cookie1
est en cours de lecture:
ActiveEmployee = new Employee() { Badge = "000000" };
Console.WriteLine(ActiveEmployee.Badge); // ActiveEmployee is NULL
... mais la lecture de Cookie1
renvoie null également.
Existe-t-il une commande comme Commit() que j'ai besoin d'appeler pour qu'une valeur de cookie soit immédiatement disponible?
+1, devrait être 'else { // insérer le code actuel _cookie1Value = cookie.Value; return _cookie1Value; } –
Aussi, probablement vouloir définir le cookie dans Response.Cookies dans le setter. –
@ChrisShain: Merci, j'ai réarrangé et simplifié le getter. En ce qui concerne votre deuxième commentaire, c'est ce que '// insérer le code actuel' est pour dans le setter. – mellamokb