【问题标题】:Expire cookie at end of session OR at specific time?在会话结束或特定时间过期 cookie?
【发布时间】:2011-11-30 04:30:54
【问题描述】:

是否可以让 cookie 在会话结束时过期,或者在特定时间过期?

【问题讨论】:

  • 会话 cookie 在会话结束时过期。
  • 如果会话在服务器上过期,则浏览器的 cookie 包含一个现在伪造的值。因此,如果它在浏览器上仍未过期,它应该不会真正伤害任何东西。当然,我认为浏览器上的 cookie 过期可能是出于审美原因......
  • 如果用户让他们的浏览器永远打开,在这种情况下,我希望它在几个小时后过期。
  • 这很像会话cookie是会话。它们是您的 Web 服务器数据存储和最终用户之间的链接。当其中一个变得不可用时(例如,由于 cookie 过期),会话结束。服务器端的 GC 最终会破坏会话,但没有用户可以再访问它(我很确定 asp.net 内置了会话劫持预防)。
  • 会话结束 = 浏览器关闭。不是 asp.net 会话。

标签: c# asp.net http cookies


【解决方案1】:

您可以使用 Expires and Max-Age 属性控制 cookie 的生命周期。无论如何,如果会话已过期或您暗示它无效,则与此会话关联的 cookie(例如 jsessionId)不再有效。

【讨论】:

    【解决方案2】:

    是的!很简单

    HttpCookie newCookie = new HttpCookie("myCookie");
    newCookie.Expires = DateTime.Today.AddDays(1);
    

    如果您希望 cookie 用于会话,请将其设置为 DateTime.MinValue。有关详细信息,请参阅 MSDN 文档here。摘录如下:

    将 Expires 属性设置为 MinValue 使其成为会话 Cookie, 这是它的默认值。

    【讨论】:

      【解决方案3】:

      由于单个 cookie 无法做到这一点,因此我发送了两个 cookie。 auth cookie 在会话结束时过期。第二个 cookie 在特定时间过期。在每个请求中,我都会检查第二个 cookie,如果它为 null,我会手动将用户注销。

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 2012-05-23
        • 2013-07-18
        • 2015-04-22
        • 2016-06-02
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多