经典ASP会话ID Cookie生命周期

时间:2009-06-19 11:37:35

标签: session asp-classic

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

即使客户关闭浏览器,如何使ASP会话ID cookie保持不变?

5 个答案:

答案 0 :(得分:5)

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

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

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

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

修改

以下文章有一个脚本来修改会话cookie(向下滚动到Cookie Expiration):

但正如Shoban正确指出存在Session Fixation (OWASP)的风险。但是,你可以采取某种方式来保护自己免受这种伤害:

如果您的应用程序存储敏感数据(信用卡,财务,医疗等),我还会添加一些注意事项,然后我建议您不要这样做,并认为您的用户必须再次登录并启动一个新的会议。比抱歉更安全。

答案 1 :(得分:1)

您可以增加会话时间。

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

答案 2 :(得分:1)

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

服务器超时存在是因为服务器无法知道用户已结束会话,因此它的工作原理是,如果他们暂时不回来,会话必须结束。

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

答案 3 :(得分:0)

这不是设计的吗?

也许您想要使用普通的Cookie?

答案 4 :(得分:0)

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

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