我正在使用ASP .Net应用程序,它在IE 7.0中运行得很好,但由于IE 8.0中的会话共享(在新窗口的情况下),应用程序会出现意外行为,因为会话可以被其他窗口修改。 / p>
一些简单的事实
我知道-NoCache选项并打开IE 8的新会话文件菜单项
我只是想知道是否有任何选项可以通过ASP .Net代码(通过获取浏览器)或任何其他解决方案在新窗口中禁用此会话共享行为
我还希望对未来的网络应用程序开发提出建议,我们需要注意避免会话共享问题
答案 0 :(得分:1)
会话共享一直是Internet Explorer 8所不具备的。新标签,任何浏览器中的Ctrl-N(IE5,6,7 FF1,2,3 OP6,7,8,9,10等)共享全球进程的会议数据。它只是收到一个花哨的名字,因为现在标签可以在计算机上有多个进程(不是新的),但仍然会“共享”会话。这有点“新”。
你知道这一点很好,但如果你试图将这种“体验”或“功能”从用户身上移开,那就不太好了。如果您需要,我会检查JScript / JavaScript解决方案,并在用户尝试打开多个会话时发出警告,但我怀疑您是否会“禁止在Windows上共享会话”解决方案。即使是值得注意的银行也已经放弃了这一点(他们从不喜欢这次会议共享的事情)
从设计角度来看:在服务器端,它非常简单。只是总是假设会话已更改。例如,这可能意味着在一个屏幕上,用户没有登录,而在另一个屏幕上。没关系。如果他刷新或转到另一个页面,您将向他显示正确的视图:登录用户查看同一页面。
只需确保在另一个窗口(即请求)中更改会话的结果,检查无效数据。但这是一个普遍的建议:在你所接受的内容中要自由,但要确保你验证任何输入。
编辑:关于额外的会话:就这样对待他们。用户总是可以为同一个用户(两个不同的浏览器)打开多个会话。就像一直可以通过同一浏览器的另一个选项卡,窗口等更改会话一样。
在“求解”方面:将会话配置为无cookie。这会将会话放在URL查询参数中。任何没有URL中的SESSIONID的旧窗口都不会被视为会话的一部分。然而,警告已经到位:这种方法最终会导致更多麻烦然后解决(即,现在你不得不担心和没有来自同一用户,同一浏览器,同一个ip 的会话请求并且仍然可以通过复制URL或标签来“复制”会话。
答案 1 :(得分:0)
将您的部分信息从Session转移到ViewState可以帮助您解决您遇到的问题。