经典ASP会话ID Cookie生存期

经典ASP会话ID Cookie生存期

问题描述:

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

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

当你开始一个新的浏览器会话并浏览到您的网站,传统的ASP将检测到没有ASP会话cookie,并会为你创建一个新的会话(因为你已经经历)。

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

在新浏览器会话/实例之间延长ASP会话cookie的生命周期的唯一方法是使用浏览器/客户端上的脚本来更改Cookie生存期。您需要实现您自己的状态管理机制(例如将状态持久保存到数据库),并使用长寿命的常规cookie(或在您的服务器端脚本的每个请求中将滑动过期延长一小段时间),以便将状态与用户匹配。

编辑:

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

但因为Shoban正确地指出存在Session Fixation (OWASP)的风险。但是,您可以在一定程度上保护自己免受这样的:

我也想补充一些注意事项,如果您的应用程序存储敏感数据(信用卡,金融,医疗等),然后我建议不要这样做,因为你的用户必须重新登录并开始新的会话。比对不起更安全。

这不是由设计?

也许你想用一个普通的cookie来代替?

+0

我想不是......我没有改变任何IIS的默认设置,它只是丢失了cookie – 2009-06-19 11:52:06

+0

Bravax是正确的 - 这是设计。会话不会丢失或过期,只能从同一浏览器会话中访问。 – Fenton 2009-06-19 11:56:01

您可以增加会话超时。

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

+0

我必须为此添加注释 - 不要将任何个人信息持久保存到客户端Cookie。不仅因为它可能导致安全问题,而且因为在许多国家(包括整个欧盟)未经用户许可将个人信息存储在cookie中是非法的。 – Fenton 2009-06-19 11:54:57

由于安全原因,您不能访问浏览器之间的会话(无论是两个不同的浏览器,还是同一个浏览器关闭并重新打开),您需要坚持会话Cookie。

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

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

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

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