【问题标题】:ASP.NET: How to set HttpCookie expiration time while it remains a session cookie?ASP.NET:如何在保持会话 cookie 的同时设置 HttpCookie 过期时间?
【发布时间】:2012-06-15 01:59:36
【问题描述】:

msdn(页面底部的评论)看来,如果你设置了一个HttpCookie的Expires属性,它就会变成一个持久的cookie,存储在临时互联网文件夹中。如果我希望它保留会话 cookie(这意味着当您关闭浏览器时,它就消失了),但仍想设置过期时间,比如 30 分钟,该怎么办?在使用 ASP.NET Membership API 时,可以在 web.config 中设置会话 cookie(身份验证 cookie)的过期时间,也就是说必须有设置会话 cookie 过期时间的方法。

【问题讨论】:

  • 如果您想要的是会话 cookie... 为什么要设置到期日期?您在示例中应该做的是在特定时间后终止用户会话,并且cookie也会过期。
  • @Ricardo: 假设用户登录网上银行,登录后应该在 30 分钟后超时,但用户一整天都没有关闭浏览器,那么会话 cookie 将不会过期天!我如何最好地解决这个问题?
  • 这个答案可能会有所帮助:stackoverflow.com/questions/520237/…
  • 您似乎将登录与 cookie 过期混淆了。没有理由登录时间不能比任何表示它的 cookie 更短。除非您的 cookie 您的登录名(而不是它的令牌),在这种情况下您会遇到更大的问题。

标签: asp.net


【解决方案1】:

考虑到您的要求,我想说除非您有非常充分的理由使用 cookie,否则您应该使用 Session 对象。

如果您没有在此 cookie 上存储“大量”信息和/或预计用户数量不会很大,这似乎是最佳选择。

【讨论】:

    【解决方案2】:

    你有没有尝试过这样的事情:

    this.Response.Cookies["d"].Expires = DateTime.Now.AddMinutes(30);
    

    【讨论】:

    • 如果你这样做,cookie 将成为一个持久的 cookie,可以在临时 Internet 文件文件夹中找到。
    • @Aperture 所以?为什么要避免浏览器实现细节?
    • 只有持久化 cookie 和 tmp cookie,当您设置 Expires 属性时,您会持久化 cookie。您能否解释一下:您想要完成什么以及为什么
    • 这会导致 cookie 持久化并且是用户不想要的
    【解决方案3】:

    您也许可以添加另一个 cookie(也是一个会话 cookie),其中包含一个 DateTime,告诉您的应用程序第一个 cookie 的有效期。然后,每次您的应用程序读取第一个 cookie 时,它​​还会检查新 cookie 以查看它是否仍然有效。

    我认为这或多或少是会员的做法。虽然在这种情况下只有一个 cookie,但该 cookie 包含多个字段(信息片段)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多