找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1856|回复: 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 q2 v6 {" g* L说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题 * J; ]" T% G" b7 R4 _ |, M+ E5 x1 G+ x: c) [7 m% g# B+ f 例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限) {( Y4 A) d" v, H/ ?7 L 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下: 6 o3 l, v% ~2 R# n4 ? 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn: l9 i. B) g) i3 ]8 B& o (. H+ C" f: \/ Z/ q 如果是在本机测试,就是做个 : ]. r9 M8 u( H, Q host 127.0.0.1 www.aaa.cn0 i/ r* ^8 v) N( w0 w host 127.0.0.1 bbs.aaa.cn * c; O, l+ ^) o; a host 127.0.0.1 blog.aaa.cn 3 i- \- g- Q3 n ) - I# V* `! A; Q3 ^, I BBS: blog.aaa.cn http://blog.aaa.cn0 M4 v5 i d. k w3 H0 ] BLOG: bbs.aaa.cn http://bbs.aaa.cn ) [! L' V t5 T- z 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: ; E" ^3 u2 Y/ R( {0 M @/ N 1.aaa.cn\passport\WriteCookie.asp / h8 g. ^1 Y9 I* J <% % R) ^8 `, F2 I5 Z0 u- g Response.Cookies("username")="xssh913913" ! [( f! Q; |2 f" d& D8 x6 p7 o$ e Response.Cookies("username").Expires=Dateadd("m",1,now) ( V+ P. e! a7 k: E" O$ ^ Response.Cookies("username").Domain="aaa.cn" [; V. [& l& s) U$ f5 n; | 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn ! q3 G8 z6 w. L. Q" c* A6 z 注:domain:能够在浏览器端对cookie的发送进行限定 6 `8 m# {" m$ G! A! h5 \& \ Response.Cookies("password")="xssh913913" L" ~. M+ H4 w1 c$ C4 p4 T7 o( N Response.Cookies("password").Expires=Dateadd("m",1,now)3 p2 }( {) o1 K9 K! } Response.Cookies("username").Domain="aaa.cn"8 x0 ] C Q1 O9 |5 C" n 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn( E* A) F6 ~. J) V) \% N& ] 注:domain:能够在浏览器端对cookie的发送进行限定 1 z* C3 z1 e8 j4 W! J; T# A1 O %> ) x3 d) B. k0 Y0 {5 ]/ S/ B9 r 2.BBS下验证用户是否登录的页面" ?1 ^2 {7 F# m7 }- R V+ t <% " ~; Q! h4 M3 N0 Q& h& ]7 ? Response.Write Request.Cookies("username")" J' A: R% m/ n6 Q Response.Write Request.Cookies("password"), N6 W. x. B& P' q* d# H3 e1 ? Response.End()4 s+ `6 a" j" T% t: V %> 8 O6 `* g6 Q& f7 ]! Z1 Q5 _ 3.Blog下同理(和BBS一样)4 u! s7 j6 J' S <%8 L9 ^. @) y5 ?8 w Response.Write Request.Cookies("username")2 ?/ }, d# Y% R) L! } Response.Write Request.Cookies("password") 7 Z( |' s- _- C7 X6 F Response.End() 4 L& _% q! B8 C% |4 R %> * l' b# X6 I2 W; v" Z* Y好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。/ n' r/ R& T) T0 \ ------------------------------------------------------------------------------------------------------------------------------------------------ c _/ C+ b X. |; [0 t 解决方案和上面一样% b6 O8 i; b, z 对应的域名和访问地址如下:& W, Q8 F$ u$ t! n9 q: O3 y 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn U2 X# U- v9 J+ ~/ Y% J ( ' [) B1 H& N7 Z 如果是在本机测试,就是做个& h1 \! R1 M1 h. A! h host 127.0.0.1 www.aa.cn % I D. B" p1 s5 ~) h, j host 127.0.0.1 bbs.aa.cn . g H6 u+ T7 w' |3 N# \ host 127.0.0.1 blog.aa.cn' X6 {+ q4 b* ^8 c) M ) , C2 ]# Z0 d6 d BBS: blog.aa.cn http://blog.aa.cn4 w+ ?$ ^ q+ p7 ]8 s, i) `2 L BLOG: bbs.aa.cn http://bbs.aa.cn8 h8 s! @* `, U3 a, m. k2 V( s 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下: 6 i, l" a! n# |$ M& A( N 1.aa.cn\passport\WriteCookie.asp * l1 \' _7 w' ^* P! X* _ <% ; @% z9 Y$ R5 q! I9 |( @ Response.Cookies("username")="xssh913913" & b8 \- `# C, Q" N2 t' b: A Response.Cookies("username").Expires=Dateadd("m",1,now): I c) p9 _& y R! c, M 注意了$ r/ T& X [* m, K, o' ?% f& M, i 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 7 L; X& F2 a$ g9 Q5 ^+ s 问题出来了吧。。。。。- Y2 b& B! a, ?& v& @: B+ J 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????. U& q$ V' {# o' Y( Q7 x" \ 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn ' X+ o2 C4 n% A 服务器上一样 ; w0 c% ^% T+ A& F ok,搞定了 ' L" L- i* p2 P& P; f % O) J3 r" C3 {% a4 l3 {/ x # \5 @$ q& [" B3 b Response.Cookies("password")="xssh913913" ( K+ f! M6 z; @, }- D Response.Cookies("password").Expires=Dateadd("m",1,now)$ u) f* ^+ e* b3 F* V 注意了0 V' L- E% O4 n# ?! e/ n- Q$ ` 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉 ' t% I8 z: a! w- }8 i2 J3 Y, F' z 问题出来了吧。。。。。 8 Q" R V e' j O l( _ %> 8 N- {8 M x" T3 T0 L P4 D* x 2.BBS下验证用户是否登录的页面 " h8 @9 q" h8 q& k% M <% 0 u! C" c2 f9 d1 ? _; B. Y" E2 T Response.Write Request.Cookies("username")6 i$ k' g6 m) E/ ^/ `8 T Response.Write Request.Cookies("password")8 A( p' c. y; G+ Y; ^) ?1 N Response.End() 8 r5 Z" B# F+ l; f' Q" r %>+ _' p4 D" m" s/ M8 m 3.Blog下同理(和BBS一样) * P' c5 g; H% i+ h* ^ <% 6 x! G" N; `9 a Response.Write Request.Cookies("username") 9 O, Y. \/ F! { Response.Write Request.Cookies("password") ) H% I' T1 c# d Response.End() 3 q; g7 {3 ~+ y R: _ %>" F l2 R1 O* c/ @9 B 提示:这个问题不会在Firefox出现-----奇怪 * B% R& X' ~( v5 {+ D 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题8 H2 [0 {" P9 \2 e2 d6 `/ F 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com 1 z7 |+ G" C; |$ T B; B5 p' j* [8 o2 e! n) b, u Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-1-19 02:56

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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