【发布时间】:2011-12-24 05:28:59
【问题描述】:
A) 我假设 Asp.Net 仅当我们在无 cookie 模式下操作时才允许您重用会话标识符,但如果我们使用 cookie 存储会话 ID 则不允许?
B)从我的书中:
默认情况下,ASP.NET 允许您重用会话标识符。例如,如果您发出请求并且您的查询字符串包含过期会话,ASP.NET 会创建一个新会话并使用该会话 ID。问题是会话 ID 可能会无意中出现在公共场所 - 例如在搜索引擎的结果页面中。这可能导致多个用户使用相同的会话标识符访问服务器,然后都使用相同的共享数据加入同一个会话。”
我不确定我是否了解重复使用会话标识符会如何导致会话 ID 出现在搜索引擎的结果页面中?
C) 继续:
为避免这种潜在的安全风险,建议您包含可选的 regenerateExpiredSessionId 属性,并在您使用无 cookie 会话时将其设置为 true。这样,如果用户使用过期的会话 ID 进行连接,就会发出一个新的会话 ID。唯一的缺点是这个过程还强制当前页面丢失所有视图状态和表单数据,因为 ASP.NET 执行重定向以确保浏览器具有新的会话标识符。
为什么需要 Asp.Net 执行重定向以确保浏览器具有新的会话标识符?难道不能直接从 URL 中提取会话 ID 并将其丢弃吗?
谢谢
A) 否。当使用基于 cookie 的会话时,如果客户端发送无效的会话 ID(例如来自陈旧的 cookie),服务器将拒绝该 ID,生成一个新 ID 并将该值发送回 cookie与响应。
只是为了确保我明白你在说什么:
如果会话是基于 cookie 的,如果您发出请求,但您的 cookie 包含已过期会话的会话 ID,那么服务器会生成一个新 ID?
但是如果会话是无 cookie 的(因此 ID 包含在 URL 中),那么默认情况下 Asp.Net 将使用相同的 ID 创建新会话?
C) 执行重定向以确保客户端收到新的会话 id 值并正确地将其与后续请求一起发回。这只是发生了双重确认。
但为什么不直接将新的会话 ID 放入 URL 中并将其发送回来。这一定是有原因的,为什么这不起作用,因此需要重定向?!
【问题讨论】: