|
|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)
5 {: E+ E7 V5 P( q2 R说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题 u. O6 v) @! O; z9 r
! Y4 X/ M7 O. Q( `9 j例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限
" S* E$ M1 R7 Z# b% S 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:
& ?" c" h0 O6 ]( k/ }5 ^( K' s$ P 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn
( W9 i6 \ V. q5 d" w8 W7 X (
9 [% @* A- H! N+ o/ _3 H, d: U, G6 \6 C 如果是在本机测试,就是做个, y# g2 _, ]. {# q& I8 k: M
host 127.0.0.1 www.aaa.cn; t( _9 x/ `5 k( q. l+ N) j
host 127.0.0.1 bbs.aaa.cn9 M- s/ v$ B) C7 O6 J# u& z
host 127.0.0.1 blog.aaa.cn
3 l. H( _/ o/ Z1 F V )# T( O1 [/ s+ k# x! S2 Y% g
BBS: blog.aaa.cn http://blog.aaa.cn
, ^8 ~1 ]& \0 x! L BLOG: bbs.aaa.cn http://bbs.aaa.cn2 X3 n% H, H' k1 D. ]9 C
通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:
! S( y/ V' `% [* a; o, X 1.aaa.cn\passport\WriteCookie.asp $ g* o& {5 j1 ^. l8 @- [; t% K& F
<%
S3 }' C5 n/ m Response.Cookies("username")="xssh913913"
! o- C) t& Y# P# V9 z+ [ Response.Cookies("username").Expires=Dateadd("m",1,now)
7 q6 j# j6 O5 P2 O/ U8 @ Response.Cookies("username").Domain="aaa.cn", f: k0 Z4 r% d! O7 G: I
注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn1 E& D6 U: b# ?
注:domain:能够在浏览器端对cookie的发送进行限定
, d/ D& x) |- G n: L' E Response.Cookies("password")="xssh913913"% z; A1 S8 h+ A
Response.Cookies("password").Expires=Dateadd("m",1,now). o% B/ y3 G1 }$ l* h' X/ T
Response.Cookies("username").Domain="aaa.cn"
# Z3 V/ j" v* {2 r5 o- c 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
2 O* q- P& I/ {# l0 Q7 l( r. I 注:domain:能够在浏览器端对cookie的发送进行限定0 R. N8 z+ J. G k
%>
& z; @2 s* F; v: `7 U 2.BBS下验证用户是否登录的页面7 K9 O1 {3 p8 m' O) g
<%" S n H( ?7 }5 `0 g' q- c
Response.Write Request.Cookies("username")
4 z4 l! q- [" t$ H; o8 F3 y8 S Response.Write Request.Cookies("password")& }4 c2 h: i5 z! [. G2 N2 [! {
Response.End()! C3 a; A6 }7 K/ A4 _: j
%>* c5 v7 h1 i1 Y% p; W
3.Blog下同理(和BBS一样)2 g2 d" J! R+ T5 y% r6 ]: \
<% J e5 k/ ?& u4 r7 U; F! F
Response.Write Request.Cookies("username")
% }& T: i* N5 \4 O" I Response.Write Request.Cookies("password")
2 q2 ]: L. a; G/ ? Response.End()
2 p' H; v2 S' J1 `3 ^ %>- D1 r! l; j7 c/ I1 h
好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。
) r& @+ n- f$ F------------------------------------------------------------------------------------------------------------------------------------------------0 \ U5 J- _3 K2 M1 H8 t, V0 w
解决方案和上面一样
4 u4 h( Z6 R! ^/ }4 E 对应的域名和访问地址如下:8 f4 {) o, }2 t9 q3 L
门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn5 ]/ {9 Y! }" ^* f" d
(
, ]# u% S8 |" B1 X! w' F- M2 [/ r 如果是在本机测试,就是做个" \0 Z% t- z5 ]7 r
host 127.0.0.1 www.aa.cn
9 |0 j. t7 d A0 j p6 O9 K host 127.0.0.1 bbs.aa.cn
; n& J2 A# k2 N+ G* s( X host 127.0.0.1 blog.aa.cn
% k# j' h7 m ?& z% S )# Y5 O& j7 P. |$ |
BBS: blog.aa.cn http://blog.aa.cn' h' [0 @7 g9 Y6 N5 S
BLOG: bbs.aa.cn http://bbs.aa.cn
! X2 T* c# Q8 T- j X1 g 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:
( i; o) b/ j$ a: D# r 1.aa.cn\passport\WriteCookie.asp
# [0 E( w' E& l( ` <%
* P! J u& b+ g' [5 k4 L5 B4 [# y Response.Cookies("username")="xssh913913"
( J7 Z* p5 u' U. \/ t Response.Cookies("username").Expires=Dateadd("m",1,now)
, S( ~) P' E9 Z* @. p; K; I 注意了% H1 H X2 G# R& {* q
这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉
5 Q3 ?4 { _6 F 问题出来了吧。。。。。
( O( \) f" V' o4 C, e4 M4 v: f. o 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????8 K" z# D* e- h1 E* }" O/ l' O# q
解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn% ?0 ?/ d8 R- e( S
服务器上一样
5 T5 a7 P4 W; P7 F# z ok,搞定了) ?2 n( `8 y/ i" n$ S1 e6 x
( X6 b2 O# N% O( ?
% o6 ^) `; |' w9 z2 X" x; X/ p Response.Cookies("password")="xssh913913"
) y% X9 v) n2 l) t8 P/ `6 F Response.Cookies("password").Expires=Dateadd("m",1,now) P1 u* q" N" h/ H
注意了
, \7 e6 {9 T' r3 C6 Q# o3 k% {: ?5 ^ 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉
6 y- D n6 Y# q9 j1 m J0 u 问题出来了吧。。。。。
5 O/ c% H- B- j% M. s2 S7 ?8 r4 v %>7 e) t' a& {1 w( N0 M! O' v, z. q
2.BBS下验证用户是否登录的页面* P& t$ C: ]* O! U' K$ K
<%! _' v2 N9 p9 |
Response.Write Request.Cookies("username")) a3 U" I* @# c$ t5 r1 b
Response.Write Request.Cookies("password")
5 C' A: {+ G; I: ^9 u$ ^( I/ H" z Response.End() m" x) M* ^% B0 [: B8 H/ j
%>
" N$ |$ q- j0 f1 S, o; L0 V$ p 3.Blog下同理(和BBS一样)" a5 z6 L( ^$ `! x
<%
0 { V. q0 r. [9 k Response.Write Request.Cookies("username")4 G; H: N4 g% w- ^) W8 I: k: W
Response.Write Request.Cookies("password")
) J E) U8 Q' m2 ] I N* R$ ]5 W Response.End()8 d& X* z4 c, M# J' v9 T6 c
%># e6 J) m' o7 \. N* z' b5 \. z$ Z
提示:这个问题不会在Firefox出现-----奇怪
2 U% [9 K- V/ V: y 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题
$ L( g1 W- }2 f# G4 | 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com4 b/ b3 S. Z. E2 M
. G& C) p5 `- [5 _' pTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882 |
|