CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

     项目中需要在一个页面弹出一个模式窗口,且在模式对话框中用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,".") ;

b.aspx 中

var openobj = window;
if(typeof(window.dialogArguments) == "object")
{
    openobj 
=  window.dialogArguments;
}
openobj.open(
"c.aspx");

这样处理 c.aspx中 Session就不会丢失了。