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随即打乱数组实现代码
Dec 03 Javascript
jquery实现上下左右滑动的方法
Feb 09 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 Javascript
简单谈谈gulp-changed插件
Feb 21 Javascript
Vue2.0使用过程常见的一些问题总结学习
Apr 10 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 Javascript
layui清空,重置表单数据的实例
Sep 12 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
Nov 19 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
JavaScript延迟加载
2021/03/09 Javascript
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
Javascript 面向对象之重载
2010/05/04 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
js友好的时间返回函数
2016/08/24 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Python如何给函数库增加日志功能
2020/08/04 Python
2014年涉外离婚协议书范本
2014/11/20 职场文书
四年级学生期末评语
2014/12/26 职场文书
2015年工程师工作总结
2015/04/30 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
社会实践心得体会范文
2016/01/14 职场文书
《将心比心》教学反思
2016/02/23 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis