代码之家  ›  专栏  ›  技术社区  ›  goku_da_master

会话更改或无效时不会删除HttpCookie

  •  3
  • goku_da_master  · 技术社区  · 15 年前

    我正在创建一个HttpCookie,只设置名称和值,不设置expires属性,然后将其添加到响应中。很简单。cookie是按预期创建的(但不是持久化的)。问题是,当会话由于某种原因发生更改时(比如网站被重建,或者我在调试时重建了我的应用程序),cookie仍然存在。我希望cookie只对创建它的原始会话有效。

    根据MSDN,它说:“如果您没有为cookie指定过期限制,cookie将不会持久化到客户端计算机,并且在用户会话过期时过期。”

    我想我不知道“会话过期”到底包括什么。我想当会话过期20分钟后,cookie就会被删除。但是,如果创建cookie的会话由于各种原因不再存在,cookie是否应该被删除?我唯一一次看到cookie被删除是在用户关闭所有浏览器窗口并打开一个新窗口时。

    下面是代码(我的cookie和MSDN示例中的cookie之间的唯一区别是我在cookie中存储了多个值):

    private void SaveValuesToCookie(string[] names, string[] values)
    {
        HttpCookie cookie = new HttpCookie("MyCookie");
    
        for (int i = 0; i < names.Length; i++)
        {
            string name = names[i];
            cookie.Values[name] = values[i];
        }
        Response.Cookies.Add(cookie);
    }
    
    private string GetValueFromCookie(string name)
    {
        HttpCookie cookie = Request.Cookies["MyCookie"];
        if (cookie == null)
            return null;
    
        return cookie.Values[name];
    }
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   pdr    15 年前

    我唯一一次看到饼干

    而这正是MSDN所说的会话到期时cookie将被删除的意思。不幸的是,我相信这在不同的浏览器中并不一致,所以它对任何人都没有多大用处。

    如果这都是真的,我可能不得不这么做 (“ASP.NET\U SessionId”)中, 然后对照电流检查 会话id,如果它们不同,那么 删除cookie或创建新的cookie。

    我不想说,但这也帮不了你。NET框架喜欢回收会话ID,所以不能保证它会有所不同。

    坏消息的方式,我建议你重新考虑你试图做什么从建筑的立场。

    重启应用程序完全是在服务器上进行的;Cookie是完全由客户机完成的事情。虽然客户端将与服务器通信,但这纯粹是一种请求/响应关系,服务器无法将应用程序重新启动等事件与浏览器通信。

    如果要将值存储在某个仅在服务器会话的生命周期内有效的位置,为什么不将其存储在会话中而不是存储在Cookie中?

        2
  •  0
  •   goku_da_master    13 年前

    http://msdn.microsoft.com/en-us/magazine/cc163730.aspx#S9

    看起来我只能在会话之外创建一个过期的安全cookie,并在可以的时候刷新过期日期(即当用户访问某些页面时)。

    推荐文章