【问题标题】:Classic ASP Session ID Cookie Lifetime经典 ASP 会话 ID Cookie 生命周期
【发布时间】:2009-06-19 11:37:35
【问题描述】:

在我的经典 ASP 应用程序中,当客户端关闭浏览器时,与 ASP 会话 ID 相关的 cookie 会丢失,即使会话没有超时。所以……

如何让 ASP 会话 ID cookie 在客户端关闭浏览器的情况下保持不变?

【问题讨论】:

    标签: session asp-classic


    【解决方案1】:

    当您启动新的浏览器会话并浏览到您的站点时,经典 ASP 会检测到没有 ASP 会话 cookie 并会为您创建一个新会话(正如您已经体验过的那样)。

    会话 cookie 就是这样,它们在会话的整个生命周期内都存在。当您关闭浏览器时,会话 cookie 将被删除(即使您在服务器上的会话状态将作为孤立会话继续存在,直到 Session.Timeout 到期 - 除非您在 Session.Timeout 期间再次提供相同的会话 cookie)。

    在新的浏览器会话/实例中延长 ASP 会话 cookie 的生命周期的唯一方法是使用浏览器/客户端上的脚本更改 cookie 的生命周期。

    如果您希望跨浏览器关闭等事件管理状态,则需要实现自己的状态管理机制(例如将状态持久保存到数据库)并使用具有较长生命周期的常规 cookie(或滑动到期,您可以在服务器端脚本中的每个请求上将生命周期延长一小段时间)以匹配用户的状态。

    编辑:

    下面的文章有一个修改会话cookie的脚本(向下滚动到cookie过期):

    但正如 Shoban 正确指出的那样,Session Fixation (OWASP) 存在风险。但是,您可以采取一些方法来保护自己免受这种情况的影响:

    我还要添加一些警告,如果您的应用程序正在存储敏感数据(信用卡、财务、医疗等),那么我建议您不要这样做,并接受这样一个事实,即您的用户必须重新登录并开始一个新的会话。安全总比后悔好。

    【讨论】:

    • " 我有 110% 的把握。当用户关闭浏览器时,会话不会结束。" asp101.com/articles/john/sessionsend/default.asp 有什么想法吗?
    • 在 Session.Timeout 到期之前,服务器上的正确会话不会结束,但关闭浏览器会导致会话 cookie 过期,从而使服务器上的状态成为孤立状态,直到在 Session.Timeout 之后被清除.如果对站点的第一次请求没有会话 cookie,则将始终创建一个新会话。
    • @Shoban: 是的......你是对的......当浏览器关闭时会话不会结束,但是当用户关闭会话时标识会话的 cookie 会话 ID 会被删除浏览器......所以,虽然会话存在,但它是无法访问的。明白了吗?
    • @Daniel - 正确,您的会话将被孤立。我已经更新了我的答案以更好地解释这一点。
    • @Kev:我猜你理解了这个问题......所以你接近被接受的答案......告诉我怎么做。
    【解决方案2】:

    “会话 cookie”是线索:当用户关闭浏览器时,他们正在结束会话。

    服务器超时的存在是因为服务器无法知道用户结束了会话,所以它的工作原理是如果他们一段时间不回来,会话就必须结束。

    如果你想要一个持久的cookie,你必须自己设置它;但是没有办法阻止用户结束他们的会话。

    【讨论】:

      【解决方案3】:

      您可以增加会话超时时间。

      Session.Timeout[=nMinutes] 
      

      http://www.asp101.com/articles/john/sessionsend/default.asp

       <%
          Response.Cookies("firstname")="Alex"
          Response.Cookies("firstname").Expires=#May 10,2012#
          %>
      

      这行不通??

      http://www.w3schools.com/ASP/asp_cookies.asp

      【讨论】:

      • 是的,这适用于自定义 cookie...我说的是会话 ID cookie,它是由 IIS 创建的。
      • @Sohnee .. 这只是一个例子。
      【解决方案4】:

      这不是设计的吗?

      也许您想改用普通的 cookie?

      【讨论】:

      • 我猜不是...我没有更改任何 IIS 默认值,它只是丢失了 cookie
      【解决方案5】:

      您需要保留会话 cookie,因为出于安全原因,您无法访问浏览器之间的会话(无论是两个不同的浏览器,还是同一个关闭并重新打开的浏览器)。

      通常,您会在服务器端存储详细信息并使用包含简单 id 的客户端 cookie 来检索信息。

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多