【问题标题】:How to create a non-persistent (in memory) http cookie in C#?如何在 C# 中创建非持久(内存中)http cookie?
【发布时间】:2011-05-28 21:17:02
【问题描述】:

我希望我的 cookie 在用户关闭浏览器时消失——我已经设置了一些看起来很有希望的属性,但是即使在关闭整个浏览器后我的 cookie 也会重新生效。

HttpCookie cookie = new HttpCookie("mycookie", "abc");
cookie.HttpOnly = true; //Seems to only affect script access
cookie.Secure = true; //Seems to affect only https transport

为了实现内存 cookie,我缺少什么属性或方法调用?

【问题讨论】:

    标签: c# asp.net cookies httpcookie


    【解决方案1】:
    cookie.Expires = DateTime.MinValue;
    

    一旦关闭浏览器,此 cookie 就会过期。

    【讨论】:

      【解决方案2】:

      浏览会话结束后,未明确设置过期时间的 Cookie 将自动消失。

      现在,“浏览会话”对不同的浏览器意味着不同的东西。对于某些浏览器,这意味着浏览器的每个实例都已关闭。对于某些人来说,这只是意味着相关选项卡或原始浏览器已关闭。

      在您的测试中,请确保您关闭浏览器的每个实例,然后再重新打开以查找 cookie。如果您仍然遇到问题,请发布浏览器名称和版本。

      【讨论】:

        【解决方案3】:

        如果您没有设置 Cookie.Expires 属性,则 cookie 将设置为在浏览器会话结束时过期。

        【讨论】:

          【解决方案4】:

          Cookie 不会在浏览器关闭时销毁 Taken from here

           HttpCookie cookie = new HttpCookie(name);
           cookie.Value = value;
           cookie.Expires = Convert.ToDateTime(“12/12/2008″);  //*difference is here*//
           Response.Cookies.Add(cookie);}
          

          Cookie 会在浏览器关闭时丢失

               HttpCookie cookie = new HttpCookie(name);
               cookie.Value = value;
               Response.Cookies.Add(cookie);}
          

          【讨论】:

          • 不完全正确,再次基于浏览器。希望浏览器聚在一起并就“浏览器会话何时结束”达成一致。
          【解决方案5】:

          在浏览器打开的情况下处理非持久性 cookie 超时的最佳方法是为超时添加一个键值。下面的代码用于登录用户 ID 密钥值和加密(不包括)安全性以实现浏览器兼容性。我不使用表单身份验证。

          HttpCookie cookie = new HttpCookie(name);
          cookie.Values["key1"] = value;
          cookie.Values["key2"] = DateTime.Now.AddMinutes(70).ToString(); 
                                       //timeout 70 minutes with browser open
          cookie.Expires = DateTime.MinValue;
          cookie.Domain = ConfigurationManager.AppSettings["website_domain"];
          System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
          

          在检查 cookie 键值时使用:

          try
          {
          
          DateTime dateExpireDateTime;
          dateExpireDateTime = DateTime.Parse(HttpContext.Current.Request.Cookies[name]["key2"]);
          
          if (DateTime.Now > dateExpireDateTime)
          {
          //cookie key value timeout code
          }
          else
          {
          //reset cookie
          }
          
          catch
          {
          //clear cookie and redirect to log in page
          }
          

          我发现使用表单身份验证和 Google Chrome 存在兼容性问题。

          【讨论】:

            【解决方案6】:

            看看 ASP.NET Session 变量。这将根据您的浏览器持续存在,并且可以设置为“无 cookie”或硬超时。

            http://msdn.microsoft.com/en-us/library/h6bb9cz9%28VS.71%29.aspx

            【讨论】:

            • 这与我的问题无关。想象一下,如果 Session 被禁用,我仍然想创建一个 Http Cookie,当浏览器关闭/未写入磁盘等时它就会消失。我认为其他一些答案是正确的。
            猜你喜欢
            • 2011-04-21
            • 1970-01-01
            • 1970-01-01
            • 2010-12-21
            • 2011-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-26
            相关资源
            最近更新 更多