A)我假设只有在我们以cookieless模式运行时,Asp.Net才允许您重用会话标识符,但如果我们使用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并将其发回。必须有一个原因,为什么这不起作用,因此需要重定向?!
答案 0 :(得分:6)
A)否。当使用基于cookie的会话时,如果客户端发送了无效的会话ID(例如,来自过时的cookie),服务器将拒绝该ID,生成新ID并将该值发送回cookie中随着回应。
B)当使用无cookie会话时,搜索引擎很可能可以使用URL中植入的会话ID来索引页面。在这种情况下,如果用户单击搜索引擎中的链接(并且regenerateExpiredSessionid为'true'),则将使用相同的ID创建新会话。后续用户在点击链接时也会重复使用相同的ID,如果多个用户使用相同的ID同时浏览,则他们会在每次请求时覆盖彼此的会话值。
C)执行重定向以确保客户端收到新的会话ID值并正确地将其与后续请求一起发回。这只是一次双重确认。