2009-11-13 67 views
1

我有ASP.Net应用程序在IE 7.0中完美运行,但由于在IE 8.0会话共享(也在新窗口的情况下),应用程序给予意想不到的行为会话可以被其他窗口修改。IE8会话共享问题在ASP .Net应用程序

一些快速的事实

我知道-nocache选项,并开放新的会话文件8

我只是想知道,IE浏览器的菜单项没有任何选项来禁用在新窗口中这个会话共享行为通过ASP Net代码(通过获取浏览器),或者任何其他解决方案

我也想有你的未来的Web应用程序开发的建议,我们需要什么照顾,以避免会话共享问题

回答

1

会话共享对于Internet Explorer 8来说并不是唯一的。在任何浏览器(IE5,6,7 FF1,2,3 OP6,7,8,9,10等)中的新选项卡,Ctrl-N共享全球进程的会话数据。它刚刚收到一个奇特的名字,因为现在标签可以在计算机上有多个进程(不是新的),但仍会“共享”会话。这就是“新”。

令人高兴的是,你意识到这一点,但如果你想利用这个“经验”或“功能”远离用户,它不是那么好。如果你想这样做,我会检查到JScript/JavaScript解决方案,并在用户试图打开几个会话时发出警告,但我怀疑你会得到一个很好的“禁止跨窗口共享会话”解决方案。即使是著名的银行已经对这个放弃(他们从来不喜欢这个会话共享的东西)

从设计的角度来看:在服务器端,这是相当简单的。只是总是假定会话被改变了。例如,这可能意味着在一个屏幕上,用户没有登录,而在另一个屏幕上。没关系。如果他刷新或转到其他页面,则会向他显示正确的视图:已登录的用户访问同一页面。

只要确保你检查无效数据,在另一个窗口(即,请求)改变的会议的结果。但这是一个普遍的建议:在你接受的内容中保持自由,但要确保你确认任何输入。

编辑:在额外的会议:只要对待他们就是这样。用户一直有可能为同一用户打开多个会话(两个不同的浏览器)。正如它始终可以通过同一浏览器的另一个选项卡,窗口等来更改会话一样。


在“解决”方面:将会话配置为无Cookie。这将会话置于URL查询参数中。任何在URL中没有SESSIONID的旧窗口都不会被视为会话的一部分。然而,警告到位:这种做法最终会导致更多的麻烦,然后它解决了(即现在你不用担心与没有来自同一用户,同一浏览器,同一个IP 它仍然可能会话请求“通过复制URL或标签复制“会话)。

+0

只要确保您检查失效的数据,作为另一个窗口(即请求)中更改的会话的结果。但这是一个普遍的建议:在你接受的内容中保持自由,但要确保你确认任何输入。 你可以通过举例说明吗?通过验证你的意思,如果在另一个窗口中更改会话,我们可以限制操作...... – Harryboy 2009-11-13 12:40:09

+0

我很难想出一个可以真正搞砸的例子(只要你说的是:验证输入和我说的,你总是假设变化)。您是否正在寻找可能出错的情况,或者您是否正在寻找解决当前错误情况的方法? – Abel 2009-11-13 20:24:23

0

移动你的一些信息,从会议到ViewState中可以帮助您解决您所遇到的问题

+0

会话是服务器端,viewstate是客户端。好的建议,但是当你的会话包含敏感数据时要小心。 – Abel 2009-11-13 11:57:52

+0

首先我不能改变我现有的代码,因为它意味着我的成本很高,第二,如果我设计一个新的应用程序在这种情况下,如果有任何重物我不能存储在视图状态 – Harryboy 2009-11-13 12:31:50