我通常不使用 Cookie,但我想研究一下这个与我通常使用的 session 变量的关系。
如果我设置了一个 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 值立即可用?
最佳答案
Cookie 不像 session - 有 两个 cookie 集合,而不是一个。
Request.Cookies != Response.Cookies
。前者是浏览器请求页面时发送的一组 cookie,后者是您随内容一起发回的内容。这暴露了 cookie RFC 的本质,不像 Session,它是一个纯粹的微软构造。
关于c# - cookies 不会很快凝固,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10840694/