IE6访问MVC3 Web应用程序失去会话状态

时间:2011-03-16 14:52:13

标签: session asp.net-mvc-3 internet-explorer-6 session-state

我正在调查我的MVC3 / .NET 4站点中的一个错误,该站点在IIS7.5上运行,其集成管道仅在使用IE6访问时才会显示。

伪过程是:

  1. 浏览器请求页面A;服务器集 一个Session []值并以响应 页面。
  2. 在页面A和页面上输入数据 http将表格发回。
  3. 服务器尝试从Session []中获取值 先前在(1)中设定但返回 null>>但仅限于IE6,8(。
  4. 在IE7,IE8,IE9,Firefox 3.6,Safari 5.0.3,Chrome 10中,相同的代码无需更改。

    在我的global.asax代码中,我放入了一个Session_Start处理程序,并发现了一些奇怪的行为。 在IE6中,每次发出请求时都会触发此处理程序 BUT ,Session.SessionID值保持不变。上面提到的所有其他浏览器只在第一次发出请求时触发此处理程序。因此,对于IE6,即使会话ID在每次调用时都是相同的,似乎它“开始”新会话的事实似乎具有清除会话ID的数据并再次启动它的效果空值。

    我得到的一个理论是,因为页面上的某些项目(图像等......)将通过HTTP访问,而页面本身就是HTTPS可能是IE6导致此行为的原因(每个协议的新会话可能?)但我转过身来关闭迫使HTTPS在相关页面上使用的代码,因此所有请求都是HTTP。不幸的是,在IE6上仍然观察到相同的行为。

    经过大量谷歌搜索后,我发现在域中出现类似下划线的内容会导致这种情况(我的内容中没有下划线),确保IE6接受cookie(我的测试虚拟机设置为接受所有会话cookie)。 / p>

    最后在最后一次尝试中:

    • 我将IE6中可以找到的每个隐私和安全设置都变为尽可能低的让我
    • 我将测试网站(http://< my machine name> / MyApp)添加到可信站点列表中
    • 清除临时互联网文件和Cookie

    我仍然遇到同样的问题。我想到了一种修复它的方法,涉及不使用Session这种情况,但我宁愿不在IE6中进行更改,因为它适用于所有其他浏览器,包括IE的后代版本。

    编辑:在另一个页面上进行一些进一步的测试,当通过IE6访问时,会话值在通过访问另一个页面进行存储后正确检索。更具体地说:

    工作页面 - 搜索:

    1. 进行搜索,显示结果 标准存储在会话中。
    2. 单击其中一个结果进行查看,详细信息页面获取条件以构建用于痕迹路径链接的查询字符串。
    3. 失败的页面 - 2阶段登录:

      1. 转到第一阶段登录页面,输入用户名和密码,假设正确存储已加密的仅http用户名的cookie值。
      2. 重定向到第二阶段登录页面,将3个索引值(List< int>)存储到Session
      3. 中的“秘密”字样中
      4. 从密码中输入3个字符并回发。
      5. 访问会话以获取3个索引值 - 什么也得不到。
      6. 由于在上面更一般的描述中进行的观察,失败的原因是显而易见的。这只是一分钟变得更加怪异(而且更令人沮丧)。

0 个答案:

没有答案