|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)
$ W- U/ Y# U: \6 g+ k* Y说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题
" T6 d- F2 {1 |% A
: X( x, e- N: {例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限
/ g- H) m% C- x) R0 @8 q: A 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:4 |5 A# V0 U& Q$ v$ R: K
门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn6 I8 r1 S) |$ R' b1 K! \6 r* w
(! @, ?5 x$ U" R
如果是在本机测试,就是做个
9 T6 x; u5 V/ m4 t* l+ C+ C1 [& p host 127.0.0.1 www.aaa.cn7 J; m" c# m8 p5 m. i# F$ {" i( M" ]
host 127.0.0.1 bbs.aaa.cn1 M( P) X4 m0 Y) Z
host 127.0.0.1 blog.aaa.cn
# ^% E8 p4 Y+ h+ \2 ~ )
( u( g& F$ j& _0 P+ i+ @ BBS: blog.aaa.cn http://blog.aaa.cn
/ u2 v; e% n% X8 [% |& I1 l, T1 v BLOG: bbs.aaa.cn http://bbs.aaa.cn2 k* l. E2 ]9 @ u) F; o+ `
通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:
" u' u- q- v/ R$ z& p' d6 V 1.aaa.cn\passport\WriteCookie.asp
/ S4 h! S( l7 x( x" u% d- {' ` <%( O, y# Z8 B( C: q& k) N% o
Response.Cookies("username")="xssh913913" t" [% Q0 R6 \
Response.Cookies("username").Expires=Dateadd("m",1,now)- u0 u1 v* m9 a
Response.Cookies("username").Domain="aaa.cn"
! y/ b- r* G/ D" M: k9 ?0 z% f( l8 J 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
+ H% X4 W# w1 H& J& C 注:domain:能够在浏览器端对cookie的发送进行限定
' G5 P. D! ~' t% |9 I" s- Q Response.Cookies("password")="xssh913913"+ P. s6 g' J, l5 N
Response.Cookies("password").Expires=Dateadd("m",1,now)
) j9 a; i) \, e, W' T& l Response.Cookies("username").Domain="aaa.cn"9 _1 A9 H8 U- S4 S! z. N/ `$ Y; ]
注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn; R1 a- J4 Q! r& D! b
注:domain:能够在浏览器端对cookie的发送进行限定) B& R4 H# L9 U8 V
%>( {8 _7 f T" z0 b% I; g- g, c& ?
2.BBS下验证用户是否登录的页面" f* E7 u7 V3 x* w# Y- R8 j6 Q
<%2 s) L* ?$ W8 q
Response.Write Request.Cookies("username")4 t8 G* I. n- _3 ?
Response.Write Request.Cookies("password")2 U9 a7 ] r8 f( f* {
Response.End()2 E' q0 U$ q8 Z8 O
%>5 q1 J# [. J5 X
3.Blog下同理(和BBS一样)
! W! O& ]$ F0 P, o <%; [# `' W% C" O2 L$ J+ m
Response.Write Request.Cookies("username"), l) F6 B: j, v& ]& j( j
Response.Write Request.Cookies("password")
- F; h, Q8 k9 t o; j- V0 N' ? Response.End()# o$ J6 l; l& ]
%>
: n2 S6 O9 m- r# H+ Y7 f F好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。1 G) B# t; E& g; a
------------------------------------------------------------------------------------------------------------------------------------------------
( n6 y: F2 {8 _! f3 L9 y; Y5 x- Z 解决方案和上面一样/ ^* g0 V2 j$ M
对应的域名和访问地址如下:
- T5 R# Y+ l4 l0 |! u0 C 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn
2 I R, \& u" L (
1 H0 R+ @% q& D/ J 如果是在本机测试,就是做个1 B; m! v0 e1 i2 |4 F9 j: a
host 127.0.0.1 www.aa.cn
$ ?# p: O4 ]" k; E; J G1 B host 127.0.0.1 bbs.aa.cn q. t6 Y4 t3 g+ N k
host 127.0.0.1 blog.aa.cn" f+ I* `: X# I5 Z# ?
). T) h/ q- F w# Z
BBS: blog.aa.cn http://blog.aa.cn; k1 [$ t2 C! I4 p3 _& g. r0 V8 S
BLOG: bbs.aa.cn http://bbs.aa.cn
7 U3 R$ \3 u- w' s4 Q) ~ H 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:
( w, c, c% J ?2 J) y 1.aa.cn\passport\WriteCookie.asp 7 m6 b+ W% ^+ l# n/ d
<%3 M" _! l+ P. x6 s' G
Response.Cookies("username")="xssh913913"
c) q; s, e; z8 N) D q+ l$ \ Response.Cookies("username").Expires=Dateadd("m",1,now)6 N# C0 z$ L ?$ k
注意了
3 A1 F0 c% W+ Y% d- R! b2 U2 z( `+ t 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉
; Z/ t7 X2 e' R 问题出来了吧。。。。。
; H; I8 h; P. R 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办????? b6 o5 k5 I7 q5 o% i
解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn
+ {) C3 }: X# T 服务器上一样# v3 X& u9 y8 D- I Z
ok,搞定了2 X& e( E$ I+ Q% P
4 d8 f7 W9 Z L) {, K: C: l. F
5 I1 l ?/ [. d5 e5 ]/ C2 p, Z Response.Cookies("password")="xssh913913"
4 L5 J5 k( y2 I5 P c* c+ I Response.Cookies("password").Expires=Dateadd("m",1,now)
% S* e4 t: x2 y+ B8 G( u8 Q2 C 注意了2 r! y% d7 d/ V4 Y3 J
这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉5 p" N7 v% \& J( ^; G. K
问题出来了吧。。。。。
" I" d! u& w. a- ~ %># }7 z; \- \2 d
2.BBS下验证用户是否登录的页面5 M+ k, w! i' |3 S4 Z/ S* J% z
<%& T1 K0 U$ A$ H7 P, K) |8 l
Response.Write Request.Cookies("username")
: i) g$ z/ v# T/ s# g t. @, ~ Response.Write Request.Cookies("password")
0 M s! \9 c3 `/ u6 i8 Z: J6 U Response.End()- d: ^; j0 E; s0 b- E' m1 ]
%>
. h$ _) T/ R3 R3 _: c8 x) d 3.Blog下同理(和BBS一样)
( }/ K# A4 t2 |! @/ d4 M3 h# \ <%
/ j; M; F6 R. J, Y; r Response.Write Request.Cookies("username")
+ `5 o) }) W; g Response.Write Request.Cookies("password")) A1 }8 d$ r. s8 E3 e
Response.End()
" F0 Y' k+ Q4 m3 E* s5 ] %>- E* l/ {7 |5 }, j; [
提示:这个问题不会在Firefox出现-----奇怪! x: D! _ y1 d4 {
看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题4 G/ g- o4 a& o/ \, I
如果还有什么不解的地方,可以直接发email给我xssh913913@126.com, {1 N2 ~% }0 `$ `- F
4 }( f' E1 _7 c+ r% P
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882 |
|