找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1858|回复: 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) 4 N" q1 O+ H: p$ F+ R# }说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题 # Q7 k7 G( j$ S3 O4 n/ C( ?! T# z& U* P+ p2 {0 E' G9 ~ 例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限7 s! r6 e% d& O6 d1 Y1 ]. m- J( R 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下: / L& K: W" }# j9 P; K/ A 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn ; n1 G! a( Z1 [- w# u: y (- S8 I i* ~- ?& I 如果是在本机测试,就是做个 8 ?2 Q# Z" s: W0 Z' n host 127.0.0.1 www.aaa.cn7 v1 Q3 ]6 ]7 S+ Q; r/ B8 m host 127.0.0.1 bbs.aaa.cn : [1 X* m; `- S8 S3 n host 127.0.0.1 blog.aaa.cn" s. Q O1 i0 X2 e. } ) " u# {: Z I/ v; y& P BBS: blog.aaa.cn http://blog.aaa.cn 4 [, b* p |/ S6 w" _$ Z. R, v BLOG: bbs.aaa.cn http://bbs.aaa.cn/ q8 \$ m7 g- [; R' Z; r 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:9 t g, H% D. Y) @% t1 e 1.aaa.cn\passport\WriteCookie.asp ) a) \ E' ?/ c9 I1 c <%7 a) C8 r+ z& ] R n Response.Cookies("username")="xssh913913" ) \6 g1 v( C% t. p# [ Response.Cookies("username").Expires=Dateadd("m",1,now) 5 E6 {0 y" P1 R, F% u Response.Cookies("username").Domain="aaa.cn"1 f& p2 f* ]$ v! _ 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn 8 Z; E3 a1 n$ a 注:domain:能够在浏览器端对cookie的发送进行限定1 I( ]' T5 ^! D& a Response.Cookies("password")="xssh913913"# h$ {, M# @; Q- k- c Response.Cookies("password").Expires=Dateadd("m",1,now) : }% @9 H/ M7 }1 I3 N* o0 y Response.Cookies("username").Domain="aaa.cn" ' W/ x; H( s C 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn1 I' W8 G- w" y6 W4 { 注:domain:能够在浏览器端对cookie的发送进行限定, `! P& W4 K2 f1 R5 I5 ^ %> ) G) T' o* o; S6 x8 R 2.BBS下验证用户是否登录的页面6 g! n) p! ~6 P& a. r& z <%2 f1 r8 C* @$ t& l, G Response.Write Request.Cookies("username") + u, [* q: M; H5 H+ u2 u0 N4 l Response.Write Request.Cookies("password")% d! E1 S4 g; Y8 ^2 }: d1 c Response.End() g t; X5 u3 }) f# e2 O %> ; Y+ c- A" ~6 ^- q( b 3.Blog下同理(和BBS一样) ) v- Z# L2 [& |+ C' ]# H, P <%) u* }& |- z! Z+ b% ^& S4 z- G. _ Response.Write Request.Cookies("username")2 y* ?5 t+ s8 ~ Response.Write Request.Cookies("password"); H+ E3 M$ t0 m, |. ]9 y Response.End() 5 ]! x% n# C3 {0 Z6 O9 e+ t3 g9 K %>3 c1 A, t* m% b+ O( ] 好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。 % U, j0 G" m' k' B0 q------------------------------------------------------------------------------------------------------------------------------------------------& @5 q" }4 I9 K' u8 Q+ d: p 解决方案和上面一样 3 C Q% X1 e5 c7 [ 对应的域名和访问地址如下: 7 d2 {9 i5 n+ y c7 @/ J 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn/ q. A$ ^1 b6 j/ ~# c (9 v! N; c. z) i 如果是在本机测试,就是做个# B7 I, C. I1 e$ V# c host 127.0.0.1 www.aa.cn4 |! B. i a( f# e7 M8 O host 127.0.0.1 bbs.aa.cn+ _3 N, L" }9 U, }, l* g# Z host 127.0.0.1 blog.aa.cn( Q0 ~6 z3 `+ L; p )9 A8 f5 u* T- }/ a BBS: blog.aa.cn http://blog.aa.cn! `% D3 l8 I' H BLOG: bbs.aa.cn http://bbs.aa.cn6 c. X/ I) ^& F4 }- w 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:. B+ ~2 Y2 `+ d" s) B* ^& f8 r 1.aa.cn\passport\WriteCookie.asp 5 \, Z- C$ e* O3 y% J5 H% Z) e" z <% ' v) c+ |! E# P; }: a5 b Response.Cookies("username")="xssh913913" : y$ `4 u$ W" e0 S+ ~, | Response.Cookies("username").Expires=Dateadd("m",1,now). p J, ]$ Z) w F' _4 g 注意了 ) O1 K; f2 ~* C2 J: {$ U 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉+ y6 x& @; b2 a* H2 E! l 问题出来了吧。。。。。( w" Y0 ] l @& L/ a 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????2 [& b- h" ~% _ 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn3 @0 x4 G, G1 \ 服务器上一样 . s! U9 c& X$ | ok,搞定了 % z) k+ X9 V3 n) N 8 P" [$ ~# R% Z; L5 J+ N 9 v" [& Q# l, p/ E Response.Cookies("password")="xssh913913"+ K2 w# M' Q$ I$ I2 T Response.Cookies("password").Expires=Dateadd("m",1,now), P& P. L$ T6 z9 N/ T 注意了 - w( _7 d$ B) m1 N* `9 R) b 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉- R& X6 P/ Q5 }! P, c 问题出来了吧。。。。。2 R5 {, A B& g( @2 U/ _: ]) J: O %>: v- S" t: W' Z: r1 }0 p; V6 g' S1 R; m 2.BBS下验证用户是否登录的页面5 ^' h+ [! }7 j3 Y9 w- U9 h$ t <%3 u3 y+ o6 U+ ^/ B8 r8 F Response.Write Request.Cookies("username") 5 V* @' ~) y, g5 e/ W# z ^8 A Response.Write Request.Cookies("password") * f; q) G' \6 _1 _ Response.End() ! K y8 ]) |- V" h %>0 A) [0 l d E/ W: X4 c. E 3.Blog下同理(和BBS一样) + W% _) E! j8 [! j' i <% 3 P# E6 I1 E' `6 F3 V8 x Response.Write Request.Cookies("username")7 ?" v0 D& U |: I4 n8 }4 Z4 r Response.Write Request.Cookies("password")$ M; }) ?$ W( l3 l% {. a/ D Response.End() 4 f8 S& s7 ? `: T+ N %># V1 L) R2 S2 | 提示:这个问题不会在Firefox出现-----奇怪2 L9 ~4 d% H' s* I 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题8 @8 ?9 z% p8 t- ~ 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com: p/ E) @# h; B) q3 | ) r, C' {$ m3 j9 c+ e. G. v! } Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882
遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

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

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

GMT+8, 2025-4-4 22:52

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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