模式窗口(Modal Dialog) 导致 Session丢失的解决办法

模式窗口就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口。

在使用Modal Dialog的时候,弹出多个页面会导致页面新页面session 丢失, 需要重新 login 。测试发现session 丢失的状况在某些版本的IE中出现, 在Firefox中是正常的。

具体的使用状况如下:

有三个文件 file1.jsp ,file2.jsp ,file3.jsp

1. 在file1.jsp 使用 window.showModalDialog 打开file2.jsp。(file2.jsp为Modal Dialog, file2.jsp不关闭的话,无法操作file1.jsp)

2. 在file2.jsp中使用window.open 打开file3.jsp。此时,页面session丢失,需要重新login。


解决方法:

可以把file1.jsp 的window 对象, 通过参数方式传到file2.jsp中

在file2.jsp中打开新页面的时候,使用那个file1.jsp的window对象。


使用如下方式打开file2.jsp

window.showModalDialog("file2.jsp“,window,"");

使用如下方式打开file3.jsp

var topwindow= window.dialogArguments;

topwindow.open("file3.jsp")



附上一些Modal Form的基本介绍内容

1。打开窗口:

Code:
varhandle=window.showModalDialog(url,objects,feathers);

其中:objects可以为参数(包括数组),也可以是对象。
通常的用法objects={window},把父窗体的对象共享给子窗体。

2。关闭子窗口:
Code:
window.close();


3。从子窗体传参数给父窗体:
Code:
window.returnVal=string;


3。清除缓存,防止模式窗口页面不更新的情况:
Code:
HTML
<METAHTTP-EQUIV="pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache,must-revalidate">
<METAHTTP-EQUIV="expires"CONTENT="Mon,23Jan197820:52:30GMT">
ASP
<%
Response.Expires=-1
Response.ExpiresAbsolute=Now()-1
Response.cachecontrol="no-cache"
%>
PHP
header("Expires:Mon,26Jul199705:00:00GMT");
header("Cache-Control:no-cache,must-revalidate");
header("Pragma:no-cache");
JSP
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires",0);


4。防止打开新窗口(如提交表单):
Code:
<basetarget="_self">


5。在模式窗口使用F5刷新页面:
Code:
<basetarget="_self">
<bodyοnkeydοwn="if(event.keyCode==116){reload.click()}">
<aid="reload"href="filename.htm"style="display:none">reload...</a>

其中:filename为窗口页面。

6。防止模式窗口打开的页面出现cookie丢失的情况:
模式窗口打开新窗口时,仅可以使用showModalDialog(url,window,feathers);方法,且objects为window。

7。在弹出窗口中获得或设置主窗口的任何值:
打开弹出窗口时用:showModalDialog(url,window,feathers)
在弹出窗口中使用window.dialogArguments对象(即主窗口传递过来的window对象集),即可以获得或者设置主窗口的值。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值