找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1862|回复: 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)1 T' G" J" @2 V9 t7 H 说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题" x* U2 p7 V& A 9 |# T) h& E: d+ a 例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限 ! K& [3 V* d+ u. V6 \. W 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:8 ]3 `1 j- I. M' H; E3 r4 Z 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn 5 Y% \8 L2 x' ~7 Z( \& N5 ` ( ' z/ C( t3 q) P$ f0 k 如果是在本机测试,就是做个# D2 [; s4 m4 W9 Z! ] host 127.0.0.1 www.aaa.cn : ]+ d0 U" E7 s host 127.0.0.1 bbs.aaa.cn * t( ^. ]# I8 O. ^- l) v, V& h host 127.0.0.1 blog.aaa.cn* Q1 i: M( E: R/ d m' M9 Z )" W6 L. X: h5 C( I5 r+ [, | BBS: blog.aaa.cn http://blog.aaa.cn0 D* g# T6 {8 P5 ~4 q BLOG: bbs.aaa.cn http://bbs.aaa.cn # j P; ^) ^% d! F3 T 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: + Y. m: \3 G1 W% K 1.aaa.cn\passport\WriteCookie.asp 6 I- [9 r; b! t) l, u) f, z! p$ Z <%# V+ ]1 w) X1 Y! j. Y9 C Response.Cookies("username")="xssh913913"5 d$ l8 |& `, U P Response.Cookies("username").Expires=Dateadd("m",1,now) 3 ?. V* L5 w- \& A# S Response.Cookies("username").Domain="aaa.cn"3 d* o/ q6 C1 O9 f) [ x 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn 4 L, l) k% F0 l8 t) s# u% w2 c* h 注:domain:能够在浏览器端对cookie的发送进行限定- e6 F% D% @( { f7 |3 l Response.Cookies("password")="xssh913913" " E7 l" t8 C7 q( P& F Response.Cookies("password").Expires=Dateadd("m",1,now) 8 z7 A! M" V' \' [. ~% A Response.Cookies("username").Domain="aaa.cn"3 [ C* d' {% v" i6 V 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn # R6 `7 s, _, f1 P 注:domain:能够在浏览器端对cookie的发送进行限定9 G- g* \ D8 I0 t4 o7 l( p1 ~" h, \ %>! j; |! A6 b8 U2 @! e7 ^9 v 2.BBS下验证用户是否登录的页面# m, j6 a4 G* N: J9 Q; u. ?9 p <%& A9 I# e* F. ]! O; [ Response.Write Request.Cookies("username") - Y( g4 z9 C( _' c1 G Response.Write Request.Cookies("password")6 h6 ]1 Z: ?" H/ a0 P8 o Response.End(). }2 A& l5 z' [' g %> : p1 K* L1 n; O" ~0 j3 f 3.Blog下同理(和BBS一样)5 M) }9 l5 T; D% z7 ~& _1 f5 O <% * y8 ]: h( S# y0 d; V Response.Write Request.Cookies("username") ; w+ B. m9 B$ H# n w2 G Response.Write Request.Cookies("password")* k& W" R: y" V# F% v Response.End() $ j; [) t) N ~6 \+ W% J! M, u %>5 H, n9 O: H, n9 h 好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。 , t9 C( ~1 K" f9 T) `0 b$ F9 O------------------------------------------------------------------------------------------------------------------------------------------------ V. S: e. {% X1 J+ S5 Q 解决方案和上面一样 7 I z; V4 |& H4 e0 Y 对应的域名和访问地址如下:* G9 j/ m, ^8 l* Z5 T' ]7 |( j 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn- H! ~) A* b* i (" x" _5 ~7 E' n/ U8 f% @ 如果是在本机测试,就是做个! e, r* [; o ]/ W+ w host 127.0.0.1 www.aa.cn0 v. E7 p5 H. ]3 } host 127.0.0.1 bbs.aa.cn 7 t) ?9 i# O/ S u host 127.0.0.1 blog.aa.cn4 Y8 d2 I0 }: _, M ) * b# x& k' |$ P, Z BBS: blog.aa.cn http://blog.aa.cn / K5 a5 p; z! s( K" Y' v( b BLOG: bbs.aa.cn http://bbs.aa.cn( E4 m& w- Z4 O7 v" ^) L, K& v 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: ) m# q) T6 }+ y" q6 r4 e 1.aa.cn\passport\WriteCookie.asp * @' E5 q( @: y G+ L' b5 [ <% 0 s& q5 Q$ Y( c+ \$ t Response.Cookies("username")="xssh913913"$ X# E- X$ c$ I* c3 D9 i& j Response.Cookies("username").Expires=Dateadd("m",1,now)7 n8 c2 x3 L$ e# t9 [6 q 注意了' ?! g( E& t( n, `! ] 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 8 d( o0 I. K8 |" _ 问题出来了吧。。。。。) V9 h+ Z$ I( x 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办????? + \" g: E% q4 q0 d5 I c 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn % ]# Q- n' P3 M. ^ 服务器上一样: ]) [+ { ?! S; A ok,搞定了( x: [; t! |8 T. S! n0 j' f 2 e8 s# I% h3 d! f , ~" q- C" X' n% A Response.Cookies("password")="xssh913913" . ], v: @9 v9 _8 R: X Response.Cookies("password").Expires=Dateadd("m",1,now) + W0 y+ v4 |: l0 f$ Z( r" G 注意了3 k: }9 _0 p6 a9 I5 N 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 " g* s& g0 z0 `, D 问题出来了吧。。。。。 * k) t3 q. j) }: U %> 2 r4 U! l$ Z4 V# x- s7 `. X2 p 2.BBS下验证用户是否登录的页面. J! H5 j' d v9 I. d4 x, v' J <%* a2 g; |" S# u1 u Response.Write Request.Cookies("username") 7 ?5 q4 t5 j7 ?6 r/ k% f1 p7 e4 `. v Response.Write Request.Cookies("password")+ C3 c% ^0 }! O; [2 S Response.End()5 w5 D( K$ o, n) S7 T, T$ k %>& g$ W0 h6 q# c- q, s 3.Blog下同理(和BBS一样)3 v- H3 |& G4 j! D; R8 r, Z9 M, K <% / `8 a& \( h9 _# O: k Response.Write Request.Cookies("username"); u6 R0 |0 S5 A3 c' ^ Response.Write Request.Cookies("password")* i/ {+ [% f, w' V Response.End()% ]; t$ @# ?9 ]9 B+ K %>- U- [1 n4 c0 j 提示:这个问题不会在Firefox出现-----奇怪 $ t$ H2 i! i5 `" j! M# ~ 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题 - [$ \+ a5 {1 {8 l 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com- [2 I# |. W) ?. H2 B- g* D " o2 ~% p! |/ T" Y& A( }9 tTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-10-25 03:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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