找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1870|回复: 0

剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)

[复制链接]
发表于 2008-1-8 13:58:00 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有账号?入住遨海湾

×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG) 5 {: E+ E7 V5 P( q2 R说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题 u. O6 v) @! O; z9 r ! Y4 X/ M7 O. Q( `9 j例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限 " S* E$ M1 R7 Z# b% S 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下: & ?" c" h0 O6 ]( k/ }5 ^( K' s$ P 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn ( W9 i6 \ V. q5 d" w8 W7 X ( 9 [% @* A- H! N+ o/ _3 H, d: U, G6 \6 C 如果是在本机测试,就是做个, y# g2 _, ]. {# q& I8 k: M host 127.0.0.1 www.aaa.cn; t( _9 x/ `5 k( q. l+ N) j host 127.0.0.1 bbs.aaa.cn9 M- s/ v$ B) C7 O6 J# u& z host 127.0.0.1 blog.aaa.cn 3 l. H( _/ o/ Z1 F V )# T( O1 [/ s+ k# x! S2 Y% g BBS: blog.aaa.cn http://blog.aaa.cn , ^8 ~1 ]& \0 x! L BLOG: bbs.aaa.cn http://bbs.aaa.cn2 X3 n% H, H' k1 D. ]9 C 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: ! S( y/ V' `% [* a; o, X 1.aaa.cn\passport\WriteCookie.asp $ g* o& {5 j1 ^. l8 @- [; t% K& F <% S3 }' C5 n/ m Response.Cookies("username")="xssh913913" ! o- C) t& Y# P# V9 z+ [ Response.Cookies("username").Expires=Dateadd("m",1,now) 7 q6 j# j6 O5 P2 O/ U8 @ Response.Cookies("username").Domain="aaa.cn", f: k0 Z4 r% d! O7 G: I 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn1 E& D6 U: b# ? 注:domain:能够在浏览器端对cookie的发送进行限定 , d/ D& x) |- G n: L' E Response.Cookies("password")="xssh913913"% z; A1 S8 h+ A Response.Cookies("password").Expires=Dateadd("m",1,now). o% B/ y3 G1 }$ l* h' X/ T Response.Cookies("username").Domain="aaa.cn" # Z3 V/ j" v* {2 r5 o- c 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn 2 O* q- P& I/ {# l0 Q7 l( r. I 注:domain:能够在浏览器端对cookie的发送进行限定0 R. N8 z+ J. G k %> & z; @2 s* F; v: `7 U 2.BBS下验证用户是否登录的页面7 K9 O1 {3 p8 m' O) g <%" S n H( ?7 }5 `0 g' q- c Response.Write Request.Cookies("username") 4 z4 l! q- [" t$ H; o8 F3 y8 S Response.Write Request.Cookies("password")& }4 c2 h: i5 z! [. G2 N2 [! { Response.End()! C3 a; A6 }7 K/ A4 _: j %>* c5 v7 h1 i1 Y% p; W 3.Blog下同理(和BBS一样)2 g2 d" J! R+ T5 y% r6 ]: \ <% J e5 k/ ?& u4 r7 U; F! F Response.Write Request.Cookies("username") % }& T: i* N5 \4 O" I Response.Write Request.Cookies("password") 2 q2 ]: L. a; G/ ? Response.End() 2 p' H; v2 S' J1 `3 ^ %>- D1 r! l; j7 c/ I1 h 好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。 ) r& @+ n- f$ F------------------------------------------------------------------------------------------------------------------------------------------------0 \ U5 J- _3 K2 M1 H8 t, V0 w 解决方案和上面一样 4 u4 h( Z6 R! ^/ }4 E 对应的域名和访问地址如下:8 f4 {) o, }2 t9 q3 L 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn5 ]/ {9 Y! }" ^* f" d ( , ]# u% S8 |" B1 X! w' F- M2 [/ r 如果是在本机测试,就是做个" \0 Z% t- z5 ]7 r host 127.0.0.1 www.aa.cn 9 |0 j. t7 d A0 j p6 O9 K host 127.0.0.1 bbs.aa.cn ; n& J2 A# k2 N+ G* s( X host 127.0.0.1 blog.aa.cn % k# j' h7 m ?& z% S )# Y5 O& j7 P. |$ | BBS: blog.aa.cn http://blog.aa.cn' h' [0 @7 g9 Y6 N5 S BLOG: bbs.aa.cn http://bbs.aa.cn ! X2 T* c# Q8 T- j X1 g 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: ( i; o) b/ j$ a: D# r 1.aa.cn\passport\WriteCookie.asp # [0 E( w' E& l( ` <% * P! J u& b+ g' [5 k4 L5 B4 [# y Response.Cookies("username")="xssh913913" ( J7 Z* p5 u' U. \/ t Response.Cookies("username").Expires=Dateadd("m",1,now) , S( ~) P' E9 Z* @. p; K; I 注意了% H1 H X2 G# R& {* q 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 5 Q3 ?4 { _6 F 问题出来了吧。。。。。 ( O( \) f" V' o4 C, e4 M4 v: f. o 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????8 K" z# D* e- h1 E* }" O/ l' O# q 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn% ?0 ?/ d8 R- e( S 服务器上一样 5 T5 a7 P4 W; P7 F# z ok,搞定了) ?2 n( `8 y/ i" n$ S1 e6 x ( X6 b2 O# N% O( ? % o6 ^) `; |' w9 z2 X" x; X/ p Response.Cookies("password")="xssh913913" ) y% X9 v) n2 l) t8 P/ `6 F Response.Cookies("password").Expires=Dateadd("m",1,now) P1 u* q" N" h/ H 注意了 , \7 e6 {9 T' r3 C6 Q# o3 k% {: ?5 ^ 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 6 y- D n6 Y# q9 j1 m J0 u 问题出来了吧。。。。。 5 O/ c% H- B- j% M. s2 S7 ?8 r4 v %>7 e) t' a& {1 w( N0 M! O' v, z. q 2.BBS下验证用户是否登录的页面* P& t$ C: ]* O! U' K$ K <%! _' v2 N9 p9 | Response.Write Request.Cookies("username")) a3 U" I* @# c$ t5 r1 b Response.Write Request.Cookies("password") 5 C' A: {+ G; I: ^9 u$ ^( I/ H" z Response.End() m" x) M* ^% B0 [: B8 H/ j %> " N$ |$ q- j0 f1 S, o; L0 V$ p 3.Blog下同理(和BBS一样)" a5 z6 L( ^$ `! x <% 0 { V. q0 r. [9 k Response.Write Request.Cookies("username")4 G; H: N4 g% w- ^) W8 I: k: W Response.Write Request.Cookies("password") ) J E) U8 Q' m2 ] I N* R$ ]5 W Response.End()8 d& X* z4 c, M# J' v9 T6 c %># e6 J) m' o7 \. N* z' b5 \. z$ Z 提示:这个问题不会在Firefox出现-----奇怪 2 U% [9 K- V/ V: y 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题 $ L( g1 W- }2 f# G4 | 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com4 b/ b3 S. Z. E2 M . G& C) p5 `- [5 _' pTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

手机版|小黑屋|遨海湾超级社区

GMT+8, 2026-7-8 08:42

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表