|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)
4 N" q1 O+ H: p$ F+ R# }说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题
# Q7 k7 G( j$ S3 O4 n/ C( ?! T# z& U* P+ p2 {0 E' G9 ~
例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限7 s! r6 e% d& O6 d1 Y1 ]. m- J( R
但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:
/ L& K: W" }# j9 P; K/ A 门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn
; n1 G! a( Z1 [- w# u: y (- S8 I i* ~- ?& I
如果是在本机测试,就是做个
8 ?2 Q# Z" s: W0 Z' n host 127.0.0.1 www.aaa.cn7 v1 Q3 ]6 ]7 S+ Q; r/ B8 m
host 127.0.0.1 bbs.aaa.cn
: [1 X* m; `- S8 S3 n host 127.0.0.1 blog.aaa.cn" s. Q O1 i0 X2 e. }
)
" u# {: Z I/ v; y& P BBS: blog.aaa.cn http://blog.aaa.cn
4 [, b* p |/ S6 w" _$ Z. R, v BLOG: bbs.aaa.cn http://bbs.aaa.cn/ q8 \$ m7 g- [; R' Z; r
通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:9 t g, H% D. Y) @% t1 e
1.aaa.cn\passport\WriteCookie.asp ) a) \ E' ?/ c9 I1 c
<%7 a) C8 r+ z& ] R n
Response.Cookies("username")="xssh913913"
) \6 g1 v( C% t. p# [ Response.Cookies("username").Expires=Dateadd("m",1,now)
5 E6 {0 y" P1 R, F% u Response.Cookies("username").Domain="aaa.cn"1 f& p2 f* ]$ v! _
注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
8 Z; E3 a1 n$ a 注:domain:能够在浏览器端对cookie的发送进行限定1 I( ]' T5 ^! D& a
Response.Cookies("password")="xssh913913"# h$ {, M# @; Q- k- c
Response.Cookies("password").Expires=Dateadd("m",1,now)
: }% @9 H/ M7 }1 I3 N* o0 y Response.Cookies("username").Domain="aaa.cn"
' W/ x; H( s C 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn1 I' W8 G- w" y6 W4 {
注:domain:能够在浏览器端对cookie的发送进行限定, `! P& W4 K2 f1 R5 I5 ^
%>
) G) T' o* o; S6 x8 R 2.BBS下验证用户是否登录的页面6 g! n) p! ~6 P& a. r& z
<%2 f1 r8 C* @$ t& l, G
Response.Write Request.Cookies("username")
+ u, [* q: M; H5 H+ u2 u0 N4 l Response.Write Request.Cookies("password")% d! E1 S4 g; Y8 ^2 }: d1 c
Response.End() g t; X5 u3 }) f# e2 O
%>
; Y+ c- A" ~6 ^- q( b 3.Blog下同理(和BBS一样)
) v- Z# L2 [& |+ C' ]# H, P <%) u* }& |- z! Z+ b% ^& S4 z- G. _
Response.Write Request.Cookies("username")2 y* ?5 t+ s8 ~
Response.Write Request.Cookies("password"); H+ E3 M$ t0 m, |. ]9 y
Response.End()
5 ]! x% n# C3 {0 Z6 O9 e+ t3 g9 K %>3 c1 A, t* m% b+ O( ]
好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。
% U, j0 G" m' k' B0 q------------------------------------------------------------------------------------------------------------------------------------------------& @5 q" }4 I9 K' u8 Q+ d: p
解决方案和上面一样
3 C Q% X1 e5 c7 [ 对应的域名和访问地址如下:
7 d2 {9 i5 n+ y c7 @/ J 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn/ q. A$ ^1 b6 j/ ~# c
(9 v! N; c. z) i
如果是在本机测试,就是做个# B7 I, C. I1 e$ V# c
host 127.0.0.1 www.aa.cn4 |! B. i a( f# e7 M8 O
host 127.0.0.1 bbs.aa.cn+ _3 N, L" }9 U, }, l* g# Z
host 127.0.0.1 blog.aa.cn( Q0 ~6 z3 `+ L; p
)9 A8 f5 u* T- }/ a
BBS: blog.aa.cn http://blog.aa.cn! `% D3 l8 I' H
BLOG: bbs.aa.cn http://bbs.aa.cn6 c. X/ I) ^& F4 }- w
通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:. B+ ~2 Y2 `+ d" s) B* ^& f8 r
1.aa.cn\passport\WriteCookie.asp
5 \, Z- C$ e* O3 y% J5 H% Z) e" z <%
' v) c+ |! E# P; }: a5 b Response.Cookies("username")="xssh913913"
: y$ `4 u$ W" e0 S+ ~, | Response.Cookies("username").Expires=Dateadd("m",1,now). p J, ]$ Z) w F' _4 g
注意了
) O1 K; f2 ~* C2 J: {$ U 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉+ y6 x& @; b2 a* H2 E! l
问题出来了吧。。。。。( w" Y0 ] l @& L/ a
不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????2 [& b- h" ~% _
解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn3 @0 x4 G, G1 \
服务器上一样
. s! U9 c& X$ | ok,搞定了
% z) k+ X9 V3 n) N
8 P" [$ ~# R% Z; L5 J+ N
9 v" [& Q# l, p/ E Response.Cookies("password")="xssh913913"+ K2 w# M' Q$ I$ I2 T
Response.Cookies("password").Expires=Dateadd("m",1,now), P& P. L$ T6 z9 N/ T
注意了
- w( _7 d$ B) m1 N* `9 R) b 这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉- R& X6 P/ Q5 }! P, c
问题出来了吧。。。。。2 R5 {, A B& g( @2 U/ _: ]) J: O
%>: v- S" t: W' Z: r1 }0 p; V6 g' S1 R; m
2.BBS下验证用户是否登录的页面5 ^' h+ [! }7 j3 Y9 w- U9 h$ t
<%3 u3 y+ o6 U+ ^/ B8 r8 F
Response.Write Request.Cookies("username")
5 V* @' ~) y, g5 e/ W# z ^8 A Response.Write Request.Cookies("password")
* f; q) G' \6 _1 _ Response.End()
! K y8 ]) |- V" h %>0 A) [0 l d E/ W: X4 c. E
3.Blog下同理(和BBS一样)
+ W% _) E! j8 [! j' i <%
3 P# E6 I1 E' `6 F3 V8 x Response.Write Request.Cookies("username")7 ?" v0 D& U |: I4 n8 }4 Z4 r
Response.Write Request.Cookies("password")$ M; }) ?$ W( l3 l% {. a/ D
Response.End()
4 f8 S& s7 ? `: T+ N %># V1 L) R2 S2 |
提示:这个问题不会在Firefox出现-----奇怪2 L9 ~4 d% H' s* I
看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题8 @8 ?9 z% p8 t- ~
如果还有什么不解的地方,可以直接发email给我xssh913913@126.com: p/ E) @# h; B) q3 |
) r, C' {$ m3 j9 c+ e. G. v! }
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882 |
|