论坛首页 编程语言技术论坛

由discuz与j2ee整合引发的IE跨域cookie认证的问题

浏览 2002 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-01-11  

近段时间在做网站,论坛就用成熟的discuz,但是我不是phper,只会java,做了一阵权衡之后,始终没有下决心学习php,于是转而寻找一些能将java web应用和dz链接的东西。

好在dz7以后有了ucenter这个东西,原意是做其他自己产品的单点登录的,说白了就是写一个cookie,各个子产品通过读这个cookie判断用户是否登录。

原来想的很简单,java生成一样的cookie,给dz读去,不就完了?仔细看了看dz生成cookie的过程,疯了。恨不得加100多层密。

放弃了。

于是直接调用ucenter,给ucenter用户登录的请求,如果通过了ucenter会返回一个xml文件,自己parse一下,就算完成登录,同时ucenter会返回一段<script>,只要你的server上有dz或者uhome(这不废话吗?就是为了整合,肯定有啊),就可以用他们的api生成cookie,这段cookie实际上也是调用的dz或者uhome的php页面。

貌似这个思路不错,但是在实际的过程中,遇到了一个很牛的问题,就是在ff和chrome上都没问题的登录,在ie上死活不行。

先说一下环境,两台服务器,19.168.0.1和.2,在.1上部署java web,在.2上部署dz和ucenter,由java发出后台请求ucenter后,由.1调用.2的dz生成cookie,这时候再到.2的时候,dz就自动登录了。

有些乱乎。但是明眼人一下能看出问题,IE倒霉的跨域cookie拦截机制把写cookie的要求截住了,我是查了n多资料才发现这个的,最终发现IE页面下面哪个邪恶的小红眼睛里面,果然有被拦截的.2写cookie的请求。

于是遍查资料,崩溃了n次,什么p3p和神秘的一串码都用上了,根本没用!

 

不过,别指望我能提供什么方法。到最后我也没有找到解决IE的这个问题。

 

倒是,第二天早上刷牙的时候想到一个事情:实际上,在真正的网站中,根本不存在跨域的问题,因为.1会解析成www.aaa.com,.2解析成bbs.aaa.com,只是测试环境中犯懒,直接用ip了,所以跨域了。

 

赶紧配了一个hosts,测试,成功!

 

写这段的目的是提醒一下:别把时间浪费在解决根本不存在的问题上。

 

同时:有点儿感慨,我在页面中引用google的地图,检查cookie的时候,发现google倒是写上cookie了!它是绝对的跨域了啊,怎能弄得呢?

 

有知道的,不吝赐教啊

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics