1

我们有一个在 IIS7 中运行的 ASP.Net 网站项目,该项目使用站点地图进行菜单导航,它表现出我以前从未见过的无 cookie 行为。

当无 cookie 用户登录网站时,他们会遇到预期的问题,即浏览不包含其会话 ID 的链接,从而导致他们丢失会话上下文。这部分似乎很好理解,虽然我们可以手动处理,但由于其他原因(这里的用户群较小),所有用户都应该启用 cookie,并且提供无 cookie 支持是低优先级。

我们现在能够重现的更令人不安的行为是,当用户在应用程序池回收后访问该网站时,如果该用户禁用了 cookie,他们将收到预期的无 cookie URL 和行为,但所有其他启用 cookie 的用户现在将获得包含该第一个用户的会话 ID 的站点地图创建的链接。这意味着无 cookie 的用户 A 登录,启用 cookie 的用户 B 登录,用户 B 点击一个链接,因为该链接包含用户 A 的会话 ID,他们现在有效地在用户 A 的会话中,并且可以看到他们的数据,等等。这种行为一直持续到网站被回收为止。

Web 配置已将 cookieless 设置为自动检测,并且应用程序池回收的默认回收期为 29 小时。

我将开始在解决方案中寻找奇怪的请求处理程序和其他错误的自定义添加,但粗略的外观并没有让我认为我们看到的不是默认站点地图行为。

我的问题是:

  • 这是一个已知的错误还是已经记录在案的东西?
  • 站点地图解析的链接是否以某种方式缓存?
  • 我没有看到对站点地图 URLS 的任何编程操作,但有没有办法从站点地图调试到实际的 URL 生成,以查看它如何以及为什么在其他用户的启用 cookie 的响应中包含无 cookie 会话 ID?

任何有关如何进一步追踪这一点的建议将不胜感激。

4

1 回答 1

0

一旦我们确认这与站点地图链接有关,它就会缩小我们的搜索范围,我们发现这个“FIX:ASP.NET 4 SiteMapProvider URLs Incorrect in Cookieless Mode”

发生此问题的原因是在导航控件第一次绑定数据时构建了 SiteMapProvider 对象的 URL 表。然后缓存 URL 表以供以后请求中使用 - http://support.microsoft.com/kb/2472263

在我们的案例中,我们看到的行为与知识库文章中描述的问题直接相关,并且应用修补程序修复了该问题。

于 2013-10-16T20:14:57.357 回答