项目中需要在一个页面弹出一个模式窗口,且在模式对话框中用window.open方式弹出新的窗体。当我在模式窗体中定义的一个Session时候,在用window.open方式打开的页面中无法访问到页面设置的Session的值,也就是说造成了Session丢失.
找了一下原因如下;
在IE中,session有效的窗口包括:
1.建立Session对象只的窗口。
2.建立Session对象的窗口中新开链接的窗口。
在IE中,session对象无效的窗口包括:
1.直接启动IE浏览器的窗口。
2.不是在建立Session对象的窗口中新开链接的窗口。
所以在模式窗口或者非模式窗口打开新窗口会session丢失,下面是在网上找的一个解决方案,帮助我解决了这个问题:下面是解决方案的具体实现:
例如:主窗体a.aspx,点击按钮时采用window.showModalDialog,打开弹出窗体b.aspx,b.aspx为模式窗体,然后在b.aspx窗体中再用window.open方式打开窗体c.aspx时,session会丢失。
解决方法:
思路: 调用 a.aspx window 的 open 方法打开
a.aspx 中window.showModalDialog 调用方法传递 dialogArguments属性为 window 对象
window.showModalDialog("b.aspx",window,".") ;
window.showModalDialog("b.aspx",window,".") ;
b.aspx 中
var openobj = window;
if(typeof(window.dialogArguments) == "object")
{
openobj = window.dialogArguments;
}
openobj.open("c.aspx");
if(typeof(window.dialogArguments) == "object")
{
openobj = window.dialogArguments;
}
openobj.open("c.aspx");
这样处理 c.aspx中 Session就不会丢失了。