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

相关文章

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

flask-login 生成 cookie,session

flask-login 生成 cookie,session Flask-Login login_user() 显示来自 Set-Cookie 标头的加密 cookie # 模拟一个用户类class User(UserMixin):def __init__(self, id):self.id = id@app.route('/login')def login():# 模拟用户登录过程user

六种msvcp110.dll丢失修复的方法分享,有效快速修复msvcp110.dll丢失

在日常使用电脑的过程中,我们可能会遭遇各种程序运行错误,其中“msvcp110.dll丢失”是一种非常常见的问题。这个问题通常发生在尝试启动某些程序时,系统会弹出一个错误消息,提示“程序无法启动,因为计算机缺少msvcp110.dll”,这可能会让用户感到困惑和无助。幸运的是,这个问题有多种解决方法,本文将指导你通过几种简单的步骤来修复“msvcp110.dll丢失”的问题,让你的程序回到正常运行

Session用法详解

本文引用http://www.accdb.net/article.asp?id=1115 阅读本文章之前的准备   阅读本文章前,需要读者对以下知识有所了解。否则,阅读过程中会在相应的内容上遇到不同程度的问题。   懂得ASP/ASP.NET编程    了解ASP/ASP.NET的Session模型    了解ASP.NET Web应用程序模型    了解ASP.N

LabVIEW开发FPGA方法与FIFO数据丢失处理

开发基于NI 7975R FPGA的系统涉及一系列流程,包括驱动安装、LabVIEW项目设置、开发调试、编译和与Windows系统的通信。重点在于FIFO的正确配置,避免数据丢失是关键环节之一,尤其是在使用高速数据流传输时。以下将详细介绍这些过程,并重点讨论FIFO数据丢失的原因与解决方案。 FPGA开发流程 驱动安装与工具准备:开发FPGA需要安装LabVIEW FPGA模块以及N

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2890 标注数量(xml文件个数):2890 标注数量(txt文件个数):2890 标注类别数:5 标注类别名称:["broke","circle","good","lose","uncovered"] 每个类别标

兔子--Android Support v4包丢失的解决办法

在开发中,Android Support v4包丢失的解决办法: Project->properties->Java Build Path->Libraries->Add External Jars 中加入sdk目录下的extras/android/support/v4/android-support-v4.jar (如果找不到,则需要用sdk manager下载andro

怎样查看电脑文件夹大小?文件夹数据丢失怎么找回

在日常使用电脑的过程中,‌我们经常需要查看文件夹的大小,‌以便更好地管理磁盘空间。‌然而,‌有时我们可能会遇到文件夹数据丢失的问题,‌这可能是由于误删除、‌系统错误或病毒感染等多种原因造成的。‌本文旨在介绍如何查看电脑文件夹的大小,‌并提供一些有效的文件夹数据丢失找回方法,‌帮助用户更好地管理电脑文件,‌应对数据丢失的突发情况。‌ 了解文件夹大小的意义是什么: 了解文件夹大小对于多种情况都

报错:Reached the max session limit(DM8 达梦数据库)

报错:Reached the max session limit - - DM8 达梦数据库 1 环境介绍2 数据库启动SYSTEM IS READY后面日志3 数据库刚启动日志4 达梦数据库学习使用列表 1 环境介绍 某项目无法连接数据库,报错:超过最大会话数限制 , 检查 dmdba ulimit -a openfiles 已改检查 dm.ini 其中 MAX_SESSION

Requests库对session的支持

场景:如何获取登录时响应消息中的sessionid,以及如何在后续请求中把sessionid添到cookie中 Requests库提供了一个Session类,通过requests库中的session对象,requests库会自动帮我们保存服务端返回的cookie数据(set-cookie里的内容),也会在HTTP发出请求时自动在消息头中放入cookie数据。 用py模拟客户端接收响应消息: