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 相关文章推荐
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
深入理解vue $refs的基本用法
Jul 13 Javascript
JS实现提交表单前的数字及邮箱校检功能
Nov 13 Javascript
详解Webpack实战之构建 Electron 应用
Dec 25 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 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
SSI指令
2006/11/25 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
js html实现计算器功能
2018/11/13 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python并发2之使用asyncio处理并发
2017/12/21 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python微信撤回监测代码
2019/04/29 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
自我鉴定书面格式
2014/01/13 职场文书
怎么写好自荐书
2014/03/02 职场文书
节约用水标语
2014/06/11 职场文书
五五普法心得体会
2014/09/04 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
应聘教师求职信范文
2015/03/20 职场文书
保研推荐信格式
2015/03/25 职场文书
JavaScript执行机制详细介绍
2021/12/06 Javascript