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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
JS命名空间的另一种实现
Aug 09 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
Javascript函数式编程语言
Oct 11 Javascript
JavaScript学习总结之JS、AJAX应用
Jan 29 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
数组Array的排序sort方法
Feb 17 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
微信小程序如何使用云开发
May 17 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
js Dialog 实践分享
2012/10/22 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
Python输出带颜色的字符串实例
2017/10/10 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python内存动态分配过程详解
2019/07/15 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python字节单位转换实例
2019/12/05 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
家居设计专业个人自荐信范文
2013/11/26 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
2014年高考决心书
2014/03/11 职场文书
党员教师一句话承诺
2014/05/30 职场文书
食品安全主题班会
2015/08/13 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript