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 相关文章推荐
JavaScript语句可以不以;结尾的烦恼
Mar 08 Javascript
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
Apr 17 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
有关Promises异步问题详解
Nov 13 Javascript
JS组件Bootstrap实现弹出框效果代码
Apr 26 Javascript
原生js实现class的添加和删除简单代码
Jul 12 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
Aug 03 Javascript
详解Angularjs 自定义指令中的数据绑定
Jul 19 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
Mar 11 Javascript
原生js实现照片墙效果
Oct 13 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递归函数中使用return的注意事项
2014/01/17 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
常用的 JS 排序算法 整理版
2018/04/05 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Java提供了哪些企业应用编程接口
2015/02/13 面试题
应届生人事助理求职信
2013/11/09 职场文书
车间班组长岗位职责
2013/11/13 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
护士的自我鉴定
2014/02/07 职场文书
广播节目策划方案
2014/05/23 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript
Python安装使用Scrapy框架
2022/04/12 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python