我通常不會使用Cookies,但我想查看這一節經文中我通常使用的會話變量。Cookie不能快速設置
如果我設置了一個Cookie,然後立即嘗試從它讀取,我沒有得到我剛剛設置的值。
但是,如果我刷新頁面或關閉瀏覽器並將其打開,Cookie似乎已設置。
我在Chrome中調試這個。這會有什麼不同嗎?
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);
}
}
下面是我如何使用它:
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;
}
}
這是我特意打電話吧,在那裏Request.QueryString["num"]
回報NULL使Cookie1
正在讀取:
ActiveEmployee = new Employee() { Badge = "000000" };
Console.WriteLine(ActiveEmployee.Badge); // ActiveEmployee is NULL
...但從Cookie1
讀取也返回null。
是否需要調用Commit()這樣的命令以便cookie值立即可用?
+1,應該是'else {插入當前代碼 _cookie1Value = cookie.Value; return _cookie1Value; } –
另外,可能想要在setter中的Response.Cookies中設置cookie。 –
@ChrisShain:謝謝,我重新整理並簡化了getter。關於你的第二條評論,這就是在設置器中插入當前代碼的原因。 – mellamokb