showModalDialog session 丢失

2024-02-11 17:48

本文主要是介绍showModalDialog session 丢失,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用showModalDialog时会经常出现Session失效的问题,尤其是在这样的使用情况下:

首先window. showModalDialog,然后执行任何的创建新窗口有关的操作,比如<a href=”xxxx” target=”_blank”> ,或者在模态窗口中调用window.open,或者通过内建帧打开某一页面,这种情况下都有可能造成Session丢失。

(可以先随便打开一个IE窗口,然后再新开一个IE窗口,然后登录OA进行上述有关操作,都有可能造成session丢失)

       解决方法是使用父窗口的,也就是打开模态窗口的Window对象来进行新建操作。

具体步骤如下:

比如在原来的主窗口的列表页面有如下语句:

window.showModalDialog(url,’’,’status=no;dialogWidth=' + iwidth + 'px;dialogHeight=' + iheight + 'px;center=yes;help=no;')

把它修改成

window.showModalDialog(url,window,’status=no;dialogWidth=' + iwidth + 'px;dialogHeight=' + iheight + 'px;center=yes;help=no;')

也就是说原来第二个参数是什么都不填的,现在填window

假设模态窗口中调用其他页面的

<a href="download.jsp?accessoryId=<%=zhengwen.getId()%>" target="_blank"> <%=zhengwen.getOldFileName()%> </a>

需要做如下修改

首先增加一个客户端函数,用于获得传入的主窗口window对象

<script language="javascript">

       function openUrl(urlstr)

       {

              var openobj = window;

              if(typeof(window.dialogArguments) == 'object')

              {   

                     openobj = window.dialogArguments;                

              }

              openobj.open(urlstr,"_blank");

       }

       </script>

然后修改链接的打开方式

<a href="#" onClick="openUrl('download.jsp?accessoryId=<%=zhengwen.getId()%>')" ><%=zhengwen.getOldFileName()%></a>

这样Session就不会丢失了!
【转】

先用window.open打开1.aspx,1.aspx中用window.showModalDialog打开2.aspx,2.aspx中用window.open打开3.aspx,那么在3.aspx中取不到Session中的值。

于是我先做了一个default.aspx页面,向Session中存入值,在后面的三个页面中,分别去取Session中的值。三个页面的打开方式不一样,共6钟情况,测试结果如下:

       打开顺序

第一个页面

第二个页面

第三个页面

open/open/open

Y

Y

Y

modal/modal/modal

Y

Y

Y

open/modal/open

Y

Y

N

modal/open/modal

Y

N

N

Open/modal/modal

Y

Y

Y

Modal/open/open

Y

N

N

Open/modal/open指页面1,2,3的打开方式,用open打开页面1,页面1用modal打开页面2,页面2用open打开页面3。

“Y”表示可以取到Session中存入的值;“N”表示不能取到Session中存入的值。

   测试环境win2000,ie6.0+sp1,多数情况下会出现;win2003,ie6.0+sp2,总是出现。

  modal打开页面后,在打开的页面再open打开新页面时,在新开的页面总会出现Session丢失的问题,所以,在脚本中使用window.showModalDialog打开页面后慎用window.open打开页面,会导致Session取不到。大家可以测试一下。

原因:modal打开的页面再用open打开另一个页面时,ie认为这是新开了一个进程,cookie将统统失效。

解决方法:

JavaScript语言: Parent.asp

<html>
<script language="javascript">
function MyShowModal()
{
var args = new Object;
args.window = window;

showModalDialog("modal.asp", args);
}
</script>
<body>
Parent Page<br>
<span>Session ID : <%=Session.SessionID%></span>
<br>
<button οnclick="MyShowModal()">Show modal dialog box</button>
</body>
</html>

 

 

 

 

JavaScript语言: Modal.asp
<html>
<body>
Modal Page<br>
<span>Session ID : <%=Session.SessionID%></span><br>
<button
οnclick=
"dialogArguments.window.open('page1.asp')">
Open Page 1 (workaround)
</button><br>
<button
οnclick=
"window.open('page1.asp')">
Open Page 1 (problem)
</button>
</body>
</html>

 

HTML语言: Page1.asp
<html>
<body>
Page 1<br>
<span>Session ID : <%=Session.SessionID%></span>
</body>
</html>

这篇关于showModalDialog session 丢失的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700431

相关文章

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较