|
登录后查才能浏览下载更多咨询,有问题联系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 |
|