c# - cookies 不会很快凝固

标签 c# asp.net cookies httpcookie

我通常不使用 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/

相关文章:

c# - WebClient.DownloadDataAsync 正在卡住我的 UI

c# - 确定按下的键是 Windows 运行时中的字母数字

c# - ASP.NET锁线程方法

c# - 创建 Access 数据库时出错?

java - 为什么 JSP 中的 cookie 对象只能包含 String 类型的值?

angular - 无法使用Go lang设置Cookie

php - 检查另一个域中是否存在 cookie

c# - 研讨会注册算法 - 多个研讨会和回合

c# - 在 IIS8 中部署时缓存不起作用

javascript - jquery 日期选择器不适用于母版页