cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失


Posted in Javascript onJune 04, 2009

不知大家是否遇到过如此的尴尬:

 当你的页面认证采用基于Cookie的方式,例如form,windows集成认证时,如下操作后有时认证失效,Authentication (用户验证信息)丢失,需要再次登录
 系统正常登录后:

 第一个页面(PageA.htm):window.showModalDialog()后,弹出第二个页面(PageB.htm)

 第二个页面(PageB.htm):window.open()后,弹出的窗口(PageC.htm)有时会跳转到登录页面

 这应该是由于不同的页面存在于不同的进程,导致了身份信息不同步,发生了认证失效,然而这是有一定概率发生的,经过MS顾问的帮忙,终于找到了方法:
 概括讲就是,在showModalDialog()时,将window作为对象参数传入PageB.htm,在PageB中,用这个参数去open(),这样问题就解决了
 具体如下:
-----------PageA.htm--------------
...
var obj = new Object();
obj.myTestWindowA = window;//将这个window存入对象参数中
window.showModalDialog("PageB.htm",obj,"");
...
----------------------------------

-----------PageB.htm--------------
...
var obj = window.dialogArguments;//获取上个页面的参数
obj.myTestWindowA.open("PageC.htm");//用上个页面传过来的参数打开下一个页面
...
----------------------------------
 经测试,没有再出现身份丢失现象,大功告成了!
 细心的朋友会发现,这样的操作会导致,在PageC.htm中由于opener不是PageB.htm而是PageA.htm了,所以无法用window.opener与PageB.htm进行通信,而open()又无法传递对象参数,慌了!
不过幸好在javascript中,对象是一颗大树,你可以在它的枝杈上挂任何东西,所以,我们为了PageC.htm能与PageB.htm通信,对PageB.htm改造 如下:
-----------PageB.htm--------------
...
var obj = window.dialogArguments;//获取上个页面的参数
var obj.myTestWindowA.myTestWindowB = new Object();
obj.myTestWindowA.myTestWindowB = window;//将PageB的window挂在PageA的window枝干下
obj.myTestWindowA.open("PageC.htm");//用上个页面传过来的参数打开下一个页面
...
----------------------------------
 如此,便可在PageC中,通过window.opener.myTestWindowB来与PageB页面的对象通信,例如 window.opener.myTestWindowB.document.getElementById("TextBox1").value="OK"

注:
1.这也许只是一种情况,可能先open再showModalDialog也有可能导致身份信息丢失,但大家只要传那个没有问题的window到下一页面,问题就能迎刃而解。

(丢失情况请参见http://www.ourac.net/read.php?tid=45123&fpage=2
2.也有可能在Session时发生,请参见http://support.microsoft.com/default.aspx?scid=kb;EN-US;196383

Javascript 相关文章推荐
在js中使用"with"语句中跨frame的变量引用问题
Mar 08 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
你有必要知道的10个JavaScript难点
Jul 25 Javascript
angular2系列之路由转场动画的示例代码
Nov 09 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
Vue开发环境跨域访问问题
Jan 22 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
javascript 常用方法总结
Jun 03 #Javascript
Javascript 获取字符串字节数的多种方法
Jun 02 #Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 #Javascript
Javascript String对象扩展HTML编码和解码的方法
Jun 02 #Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
Jun 02 #Javascript
慎用 somefunction.prototype 分析
Jun 02 #Javascript
网页和浏览器兼容性问题汇总(draft1)
Jun 01 #Javascript
You might like
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
PHP insert语法详解
2008/06/07 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
js中有关IE版本检测
2012/01/04 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
大学毕业生工作的自我评价
2013/10/01 职场文书
秋季运动会广播稿
2014/02/22 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
2014年行政部工作总结
2014/11/19 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python