找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1854|回复: 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) ) d, @& o4 x9 {0 [, P说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题2 @- k& G8 n2 d {- _; W! M3 Q1 p 例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限; l& M2 \: g7 G 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:7 H2 B! B: {4 ^9 W8 s! H 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn * k( m3 a2 V" j2 ^. M (* A. y6 z- d6 H q& l 如果是在本机测试,就是做个 3 O& C: d9 @9 E3 l2 L host 127.0.0.1 www.aaa.cn 8 k3 G3 O0 `! R2 i9 I) ]) ? host 127.0.0.1 bbs.aaa.cn" C" L2 d; L; ]% i* A* y6 A host 127.0.0.1 blog.aaa.cn Z- q0 X5 o. R" \ ) ; e8 E: B% Z2 y# e BBS: blog.aaa.cn http://blog.aaa.cn ' M8 Z. e) z1 W5 |* I; R BLOG: bbs.aaa.cn http://bbs.aaa.cn , P y; T7 o1 B5 a8 U 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: ) R, D$ x" j8 B' h# z 1.aaa.cn\passport\WriteCookie.asp 4 C2 }5 Z) @4 m/ k: r c <%( v0 ?) A, p: C! U0 k Response.Cookies("username")="xssh913913"5 Z2 D- F: g- Y2 c2 T Response.Cookies("username").Expires=Dateadd("m",1,now)1 k' h. d& ~( V4 b$ j% H3 \: D& P Response.Cookies("username").Domain="aaa.cn"6 a' j% @/ v6 Z* S) i 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn$ T3 p! b2 \; M. l 注:domain:能够在浏览器端对cookie的发送进行限定8 V: T( g2 c- K) v Response.Cookies("password")="xssh913913"0 L% e. \' ~- d( w: {8 {9 O8 R Response.Cookies("password").Expires=Dateadd("m",1,now) , ^3 P, A, p8 ` Response.Cookies("username").Domain="aaa.cn" 7 @) i9 S1 |8 U! K 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn6 T* @; }( L, e2 v# Y0 |* y5 s* S0 } 注:domain:能够在浏览器端对cookie的发送进行限定1 _8 i5 }; x- l: p, V %>9 a& ~! _" k* @# N" g 2.BBS下验证用户是否登录的页面 8 K Y* b! z1 X$ S X <%+ e+ {3 O* y1 K z$ F( }* J Response.Write Request.Cookies("username"), o; `( j4 Z0 N' A/ o5 J: ` Response.Write Request.Cookies("password")- `2 x$ Y, J f6 _( k$ { o+ B$ J Response.End()) Q. d* ?( ~9 c7 j7 x6 g, c %># r1 t( ~1 k; `' \- W 3.Blog下同理(和BBS一样)/ i- Y1 O0 |1 v6 m <%: Y# t. g. x7 ^7 b, Q1 f) s9 M. h Response.Write Request.Cookies("username") # |8 f% ~# r7 O' `& U Response.Write Request.Cookies("password")/ T! O) ]& B% L$ ]) B3 Z8 [ Response.End() 8 q; x' m6 r, F( y7 a7 T %> , R s5 i8 S! b! ]好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。 + k* S& L+ m1 V$ m; y------------------------------------------------------------------------------------------------------------------------------------------------ * v$ W) r. O& T- q9 |! Y5 X8 S, M 解决方案和上面一样" j' N- I* \; | 对应的域名和访问地址如下: + m% z' w! o/ x) ^4 X 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn 1 E2 c7 K* T5 ] ( . H0 v: Y; H' ]2 D 如果是在本机测试,就是做个9 T6 M, c7 m, t3 y/ \ host 127.0.0.1 www.aa.cn / n7 D# [5 T& ~5 \5 F9 x host 127.0.0.1 bbs.aa.cn' p; R/ V$ v: y6 ^5 \. ^7 j3 p host 127.0.0.1 blog.aa.cn3 V5 g3 |% v1 g; i7 N ) # U0 u8 @: }. }, l BBS: blog.aa.cn http://blog.aa.cn; r7 e( D( A. D1 D0 C7 H BLOG: bbs.aa.cn http://bbs.aa.cn $ z$ z* B! {/ p! Q1 \* e 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:' n0 B+ f2 @6 [- `. S' f9 j3 @6 X 1.aa.cn\passport\WriteCookie.asp 3 [) Z* K: N( G: S* B9 i/ r <%% W2 o1 ~/ U; I* m Response.Cookies("username")="xssh913913"5 L7 y" E5 d2 x% [( k/ t Response.Cookies("username").Expires=Dateadd("m",1,now) ! t% V/ _ v7 V$ ?' o 注意了5 C( r8 y z5 H1 m1 O( X6 t9 E 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 ( m+ t; b2 P4 {9 j0 I; j# i 问题出来了吧。。。。。 7 W" n8 w' J2 W0 Z$ q3 W( j( M 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办????? 6 b5 m8 [" i* H" |1 N } 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn! W7 F$ o% A% L5 X7 A* a: H 服务器上一样 0 E" J8 t$ u5 I7 z6 e$ v' M& O% { ok,搞定了1 {1 v9 F- y0 @% H7 }0 r $ j, C5 m: v. L9 `" u4 ^. d/ U2 h4 C + e" P& Z/ f1 j1 o" a: d) p/ `* k6 I Response.Cookies("password")="xssh913913"( ~: s& u& p. }% E8 d Response.Cookies("password").Expires=Dateadd("m",1,now): h& i! z8 d7 t& y5 s 注意了 - q- K0 W' }/ W: ~$ k& ^. [ 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 % ?, \' I7 n: U% M2 `' C 问题出来了吧。。。。。* Z* I8 `" q4 r0 r4 K3 H, m %>; c1 M6 I( [: y$ E5 f 2.BBS下验证用户是否登录的页面( t0 L) r& a9 O% T6 u9 M <%- l7 p+ @% J K" E) w) D Response.Write Request.Cookies("username")- F2 Z+ L0 Y1 ] Response.Write Request.Cookies("password")" T* A: {" z! w" w- H' i8 c' ?2 O Response.End()- b* D: Z: Q2 p, U6 k %>: [4 t: N$ F+ B6 m" ` 3.Blog下同理(和BBS一样) - D& \ p7 M4 V& ^+ E$ D; R <% M( B) ~& |1 S2 E% ^. h Response.Write Request.Cookies("username") $ @# O6 P {* z1 @6 m Response.Write Request.Cookies("password") & {7 {+ N$ V4 Z. F8 ?& [ Response.End(). k' t9 J! P" y q %>: y6 Y% G1 T$ W) q+ c& H 提示:这个问题不会在Firefox出现-----奇怪 / ]1 Z# W' v6 z( Y+ O2 Z8 m4 b2 O) ^9 C 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题 " H1 F' h6 I' p. d! R0 n; ^ 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com " T" Q `) C' h* s: P: Y . S) i: _. J4 _3 Q ATrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2024-11-22 07:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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