找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1861|回复: 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) 7 G- l) _& ?. @9 E! W& n; `) ?$ y# D说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题8 r# B$ \- J4 r8 U5 d8 n 8 s( j9 h7 G* p9 ~! J* j7 C* U' V 例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限; V6 `8 R" D% i. |9 T 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:" ~* c: S# e0 x+ U 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn( A+ T4 q1 K) k$ J! z9 {1 t (% ?' d- S0 l4 ]) X& z6 O! ^! G 如果是在本机测试,就是做个' `1 K0 t+ w! C, W. y) \ host 127.0.0.1 www.aaa.cn" w3 G! |( Y& `$ L% }& k$ y5 b ` host 127.0.0.1 bbs.aaa.cn 5 L9 e2 j2 U1 N& h" S& X9 A host 127.0.0.1 blog.aaa.cn. j& m$ P( J/ F6 \. L3 {, t0 | )/ w% ]+ s& k( l5 f2 s, [ BBS: blog.aaa.cn http://blog.aaa.cn 7 q/ g- b" q8 d# |5 T& E BLOG: bbs.aaa.cn http://bbs.aaa.cn ; i0 Q/ S: B. _3 c2 _1 ^ c 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:( _5 e( c- I! k! v 1.aaa.cn\passport\WriteCookie.asp ! C% X7 O4 Y1 i# H/ ? <%5 O1 o: `) ^; B Response.Cookies("username")="xssh913913" 3 x- f0 r6 n3 b4 f! [6 s' F Response.Cookies("username").Expires=Dateadd("m",1,now) 7 J3 M6 r8 R. i Response.Cookies("username").Domain="aaa.cn"4 ]- [7 z- F J6 l 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn 1 F5 v0 B# E. ` 注:domain:能够在浏览器端对cookie的发送进行限定 @* O: Z" b# }( O- _ Response.Cookies("password")="xssh913913" % u5 o( O0 p% Q, G4 ] Response.Cookies("password").Expires=Dateadd("m",1,now) + b$ w! w: s0 ]& E; {5 t. A8 d% C Response.Cookies("username").Domain="aaa.cn"* X) f0 r i( ]9 j 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn - N& F5 ]; y. M 注:domain:能够在浏览器端对cookie的发送进行限定/ U2 r+ I3 M' | %>+ o3 u( E5 [+ y ^6 c- O, z& c7 E" h& \ 2.BBS下验证用户是否登录的页面; w2 c% V9 f' @& h6 e$ X <% 4 r" ]0 z1 U& C' ?" Q Response.Write Request.Cookies("username") ! H: q0 V6 _7 \3 s7 t0 m Response.Write Request.Cookies("password") / X$ q! D6 C6 Z4 e; n- s- P Response.End()7 [1 y E8 s- s6 K$ |4 d! ?+ ^' V %> / D+ s6 i: c c 3.Blog下同理(和BBS一样)% W* U8 R# T, T u <%) B3 ]( M! j: v) }9 O; a Response.Write Request.Cookies("username") " y& m+ [; Z& o0 v. s( Y Response.Write Request.Cookies("password")- g5 r; j' Z, |$ }8 p3 D2 C+ ^ Response.End()' d3 z3 @! Q V$ A %> : l s% V$ m7 p8 ~- ~% E% f6 y( g3 e好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。7 G. Z ~* `& U$ I9 ? ------------------------------------------------------------------------------------------------------------------------------------------------ : b5 B/ {' j5 g3 W5 I8 b: @ 解决方案和上面一样! n) U% R! l0 E* q1 `. Y4 f 对应的域名和访问地址如下: - _9 s7 H# W. O: d& a9 n 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn ( U; N. L% C) l ( ; B: w, g& U C- U6 T 如果是在本机测试,就是做个 1 G2 E4 b5 t8 d host 127.0.0.1 www.aa.cn! R3 q0 t7 M) d1 C) V host 127.0.0.1 bbs.aa.cn! @+ S' W( U# k+ Q( A host 127.0.0.1 blog.aa.cn, H8 |, t4 u) X! j& S ) : B2 i5 X2 X" N7 Q4 V7 ?" M BBS: blog.aa.cn http://blog.aa.cn6 g5 c1 A7 ?. _7 g3 N BLOG: bbs.aa.cn http://bbs.aa.cn# t* J2 v+ u0 S/ N 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:" [8 W: E7 I6 l 1.aa.cn\passport\WriteCookie.asp 0 |* G! a( u7 T4 V <% z2 k" i2 n1 I2 q: O, Y+ ^& X) z Response.Cookies("username")="xssh913913"& @6 m3 e: p4 o# a6 Z' `% u Response.Cookies("username").Expires=Dateadd("m",1,now)2 T9 v) n# | Y/ T" ` 注意了 . u; ?7 h; }# }# P: X) C 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉1 [" y ]2 X' X5 v 问题出来了吧。。。。。9 c9 r" z8 i! t) O( }1 n5 a; a 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办????? & b! Y* V$ ]7 t" M* r) o3 k 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn / Q7 [, F' V w 服务器上一样+ b5 e4 a& J8 d% i0 B ok,搞定了+ j1 v2 O6 S! N3 U! X; \. D2 B * |0 u) x: ^0 Q% R0 U7 m" u, J2 A+ F1 F) l% z. ]; G/ g' E) ] Response.Cookies("password")="xssh913913" r; U2 k2 X+ S+ d6 L, r" N Response.Cookies("password").Expires=Dateadd("m",1,now)6 J1 \3 ^. |% x 注意了 ; b- N2 N% r1 ^: d 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 ^$ F: C$ T3 X" \( k 问题出来了吧。。。。。 ! B% [3 e! H$ X. \& c %> " t9 n; N& b/ j 2.BBS下验证用户是否登录的页面 9 V& k, A1 R" r. [' s <% & P8 P* A+ t% H. L Response.Write Request.Cookies("username") " N. x+ u+ f& X: W1 }1 j% k$ c Response.Write Request.Cookies("password")0 y% z$ Z+ P8 B6 v Response.End() % O7 K% g, r( f) f2 H %> & U: X- [/ \1 [) l. N9 I, T 3.Blog下同理(和BBS一样) 3 F6 G2 d4 g4 Y! T, E <% / W: @7 d M! E& {$ ^ Response.Write Request.Cookies("username") . M( s. N: X* C1 a Response.Write Request.Cookies("password")) @2 e! D* n) L! M/ y) | Response.End()) _* j, G' j# r" B7 C. J6 ~ %> . ]) F/ q+ P2 M! E 提示:这个问题不会在Firefox出现-----奇怪 2 A& Q4 K! M/ T4 t+ Y 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题 : z9 f& g8 P4 Q: T 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com L; |) ]7 M$ F1 q8 L' x6 B" |/ a: x! e" y A! M* N4 k* ` Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-5-15 06:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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