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 相关文章推荐
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
jquery select动态加载选择(兼容各种浏览器)
Feb 01 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
详解js的事件代理(委托)
Dec 22 Javascript
Javascript中parseInt的正确使用方式
Oct 17 Javascript
Vue组件之单向数据流的解决方法
Nov 10 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
JavaScript实现抖音罗盘时钟
Oct 11 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 Javascript
vue绑定数字类型 value为数字的实例
Aug 31 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中一个完整表单处理实现代码
2011/11/10 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP制作万年历
2015/01/07 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
python 显示数组全部元素的方法
2018/04/19 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
护士辞职信范文
2014/01/19 职场文书
材料员岗位职责
2014/03/13 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
业务内勤岗位职责
2014/04/30 职场文书
党员自我剖析材料
2014/08/31 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
党员自我评价2015
2015/03/03 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
Python实现滑雪小游戏
2021/09/25 Python