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 相关文章推荐
动态表格Table类的实现
Aug 26 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
Jan 24 Javascript
使用js如何实现全选与全不选
Dec 30 Javascript
js 获取、清空input type="file"的值示例代码
Feb 19 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
jQuery编写网页版2048小游戏
Jan 06 Javascript
Javascript Promise用法详解
May 10 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
微信小程序与后台PHP交互的方法实例分析
Dec 10 Javascript
JavaScript实现优先级队列
Dec 06 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
随机头像PHP版
2006/10/09 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
javascript 函数式编程
2007/08/16 Javascript
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
sails框架的学习指南
2014/12/22 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python实现kmp算法的实例代码
2019/04/03 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
python如何实现复制目录到指定目录
2020/02/13 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
Linux机考试题
2015/07/17 面试题
房地产广告词大全
2014/03/19 职场文书
学校运动会感想
2015/08/10 职场文书
养成教育主题班会
2015/08/13 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
志愿者工作心得体会
2016/01/15 职场文书
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技