|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)
% ^# z6 X( \' P说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题7 D5 E7 p1 r* I3 z
! A, q# U- K1 A* y0 ]. p+ |例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限
! T0 [% o2 u! D) Y7 H. W 但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:/ ^4 \; U% r# d2 j6 N6 J8 R" y
门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn6 L, R. n# r& T; D
(
) c0 f3 _0 x# r6 ~3 Y: t6 o! J/ D: d6 a 如果是在本机测试,就是做个; U- z/ F# v& O. X1 Z* @
host 127.0.0.1 www.aaa.cn4 m" m8 b$ z( M" e* V/ M
host 127.0.0.1 bbs.aaa.cn z- E. B, W2 P& g1 d8 _; n+ f B
host 127.0.0.1 blog.aaa.cn. Q7 B7 k9 X) y* e
)
; ]$ c# R* b! \/ n7 t5 V4 E; @ BBS: blog.aaa.cn http://blog.aaa.cn
! ]4 Q" }: ] @. m1 P4 k T7 G BLOG: bbs.aaa.cn http://bbs.aaa.cn
: Y1 B. V& l0 R3 I% _ 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:
2 x& O! I/ T+ f9 W; X 1.aaa.cn\passport\WriteCookie.asp
" C, _! L4 q b <%" l9 N! @+ r$ ]8 i/ _9 Z
Response.Cookies("username")="xssh913913"7 r4 j" q7 T1 d$ U% _0 q2 G/ g
Response.Cookies("username").Expires=Dateadd("m",1,now)
) A% `- U# P7 ~0 n Response.Cookies("username").Domain="aaa.cn"
( ~, z% `% W6 m* f p% n9 J 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn6 B1 B" q7 }6 o) x1 A1 u
注:domain:能够在浏览器端对cookie的发送进行限定
+ d5 E8 g; M* Z% M3 v- G8 Q) E" n6 b Response.Cookies("password")="xssh913913"0 S9 j( ~8 ~( n& G# W/ p# O8 I
Response.Cookies("password").Expires=Dateadd("m",1,now)6 V* Z+ p, h. y- [
Response.Cookies("username").Domain="aaa.cn"
, b4 o- d5 l/ u% e j 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
9 V: i' D' D5 R! L9 a" G* d! ^9 A 注:domain:能够在浏览器端对cookie的发送进行限定0 ^, ?) |( W8 Y/ `& R$ A; @) I1 J
%>
/ Q2 w7 T, p5 N$ T5 e2 a" U; l1 A4 h 2.BBS下验证用户是否登录的页面6 f5 N e9 ~3 Q. d, I7 ~
<%
6 S7 f' o' W; P; ^( A; h- t Response.Write Request.Cookies("username")
6 g* Z5 ~0 n9 j% _: B$ Y; ~ Response.Write Request.Cookies("password"); p8 e) z& S2 Q4 R
Response.End()
" z" P2 V' S6 t( E- x7 w %>
" W a( e) C [+ M& @2 z# p; H 3.Blog下同理(和BBS一样)! u! t! t7 k$ r3 ^/ E; n! m4 s6 T
<%* i$ ^) f1 o3 ?' N! e/ M
Response.Write Request.Cookies("username")
9 [/ b- {& c2 H( q4 Q/ `0 ? Response.Write Request.Cookies("password")( ?4 b8 ^$ \5 b( V8 l
Response.End()
9 n2 J; d: V" U %>
. o. ~' {2 d. w' c, X# f好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。, L% g$ v J- S
------------------------------------------------------------------------------------------------------------------------------------------------
7 G- @* ?0 i$ U: e$ H! U5 w3 K 解决方案和上面一样
& ?2 h' d$ P2 u2 C0 L* r, ] 对应的域名和访问地址如下:
/ V8 W0 o% B' S H& } 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn( l9 f7 V; N+ o# t7 n& [
(- T0 z; P6 j5 j' }
如果是在本机测试,就是做个( Y' I) w0 A! A- {" o e7 ?
host 127.0.0.1 www.aa.cn- v& h: e# Q# ~& V
host 127.0.0.1 bbs.aa.cn
9 l' Y! o$ H: `( l+ j host 127.0.0.1 blog.aa.cn
. ^1 H3 E0 I& r( ?) e, L" k: n) e1 r )4 ?7 ] g, `, s+ [$ W/ }/ {0 h
BBS: blog.aa.cn http://blog.aa.cn
! U7 @; i# z5 v2 B0 \- A7 v* J BLOG: bbs.aa.cn http://bbs.aa.cn
* x" f5 c% r3 ] 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:( ]# {' T9 O9 ]2 A" q: p
1.aa.cn\passport\WriteCookie.asp
/ j3 ?. K, r! V, C% E <%- I/ z; g! N) m+ K/ P1 ?4 @
Response.Cookies("username")="xssh913913"
% h8 E$ E/ u% R4 \9 Q& R/ `! R, ^ Response.Cookies("username").Expires=Dateadd("m",1,now)
0 J7 R$ B' a# I. m5 S 注意了
9 m6 b# E3 R5 p/ V 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉# s0 d2 g4 q- X3 U' y+ r# ~4 d, \
问题出来了吧。。。。。
5 F- b- j J) B$ B M 不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????6 H$ f$ n/ Z6 ~) s4 v+ x
解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn
9 |. S- F1 ?2 P: l1 c6 \* o 服务器上一样
/ H6 k' G& j& V, u ok,搞定了. O' G) A7 D# v# N+ `( ^- M
. W! s3 T" \$ h* A9 z4 e& ]
8 W) m k: I# ] Response.Cookies("password")="xssh913913"& l0 ~* e, z( d
Response.Cookies("password").Expires=Dateadd("m",1,now)+ [* m( @9 ]1 N2 R
注意了
0 l/ k u7 w; @9 G' G+ {3 A 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉# I. t. B' O' G0 t/ q% A( @& [
问题出来了吧。。。。。
8 p* A2 O+ f+ v* l, Y8 v$ \8 I& p %>5 @$ `) K4 N9 i
2.BBS下验证用户是否登录的页面7 n3 v" n- o4 r4 d! z9 e% N" X2 P
<%$ N5 }$ r7 p( I6 w- y- u+ z; g
Response.Write Request.Cookies("username")
/ h! D* j2 p2 a Response.Write Request.Cookies("password")
2 l! t5 g$ @6 ]- Q# ^$ P1 V Response.End(). @9 ~- n1 k6 C1 K
%>
! ? x* S9 p5 b6 ^' _ 3.Blog下同理(和BBS一样)
+ {! y7 i* B+ |9 o# V+ B7 H$ V3 h0 r <%% W! D2 W7 e6 x% M! L5 _
Response.Write Request.Cookies("username") e! d: [9 j& @0 `7 L/ d
Response.Write Request.Cookies("password")
J- O8 T) {/ i& [; X Response.End()
# F+ l) T U- y %>& s! [+ C% J+ K5 f& V9 V8 p
提示:这个问题不会在Firefox出现-----奇怪
, t8 r! k. E' W+ V+ r' [6 ` 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题- y. T0 d' s+ h! F' \
如果还有什么不解的地方,可以直接发email给我xssh913913@126.com
$ @2 G' r6 P5 W
8 f3 _, J: `& w9 yTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882 |
|