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插件制作 表单验证实现代码
Aug 17 Javascript
一个检测表单数据的JavaScript实例
Oct 31 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
Apr 16 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 06 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
利用JavaScript写一个简单计算器
Nov 27 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页面间传递参数实例代码
2008/06/05 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
简单实现python爬虫功能
2015/12/31 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
python将txt文件读取为字典的示例
2018/12/22 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
python 实现图片裁剪小工具
2021/02/02 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
国外软件测试工程师面试题
2016/12/09 面试题
求职自荐信格式
2013/12/04 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
环保宣传标语
2014/06/12 职场文书
师德师风的心得体会
2014/09/02 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
北大自主招生自荐信
2015/03/04 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers