今天掉到了一个大坑里面,爬了1个多小时才发现不是代码的问题,居然是浏览器的问题… 下面是问题的发生过程
单点登陆 有2个站点 http://a.abc.com http://b.abc.com
登陆后从a跳转到b,结果在b网站能获取到在a站点登陆的cookie的值,但是 b站点里面判断是否登陆用的 Request.IsAuthenticated 的值一直是false,也就是表示在B站点,是没有登陆的.
调试了1个多小时,能想到的单点登陆的问题都想到了,还是不行.
后面用同事的电脑调试了一下,他的就是正常的 Request.IsAuthenticated 为true, 一看他的浏览器是火狐
于是我也用火狐,IE9, 360(极速和IE模式)都测试了一下,结果都是正常的为true ,如下图所示
就只有这坑爹的猎豹浏览器返回的是个false
无力吐槽…1个多小时啊,居然是因为浏览器的问题 我记得以前用腾讯的TT浏览器也有一个 javascript的坑……
PS:在我昨天下午跑到猎豹论坛提交了以上的bug之后,猎豹的工程师今天早上主动联系了我,并且和我分析了错误产生的大概原因,以及临时的解决方法,听我一一道来
产生原因:因为我是单点登陆,也就是在A网登陆之后,是要跳转到B网站的,在这跳转的过程中,可能发生了 核心的切换 ,比如你浏览器设置的是IE模式,那么可能从IE兼容模式,切换到了 极速模式,然后又从极速模式,切换到了IE模式这样,于是cookie就这么丢了(但是为嘛又能读取到cookie的值呢?).于是 Request.IsAuthenticated 就是false了
临时解决方法:找到桌面的猎豹浏览器,右键属性,我们发现默认的是如下所示
猎豹的工程师,让我将最后的几个文字修改成如下所示 --dflag=1 表示锁定浏览器为IE兼容模式 --dflag=2 表示锁定浏览器为 极速模式
我现在先设置为IE兼容模式,然后继续调试一下我昨天的站点,发现数据居然正常了.
然后我设置为 –dflag=2 锁定浏览器为极速模式,也正常. 但是在锁定为极速模式的时候,浏览器的提示还是为IE兼容模式
猎豹的工程师讲,当我们手动在猎豹的快捷后面加参数调试,用参数锁定后 显示的内容就不准了
ok 到此为止,算是有了临时的解决方案了. 速度还是蛮快的,昨天提交,今天就解答了,很满意.顺便我也提了一下我的另外一个建议,当用猎豹浏览器添加收藏的时候,那个弹出来的方框真的是小啊,如果像我这样有几十个收藏夹的,就真的觉得很麻烦.
工程师说会反馈上去,期待下一个版本的更新.