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