|
|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
剖析IE对CN域名Cookie支持的BUG(IE对小于5位的CN域名重大BUG)
- [ p1 t( r4 q6 H0 a4 r说明:对于大于或等于5位的CN域名(aaa.cn),以及COM(b.com),其他任何非CN(c.org)的域名不会出现此类问题0 v2 U; h$ ~& {6 A. j
4 R. i) U5 ~- F8 S7 \) Q& U例如:一公司有三个系统 门户网站,bbs,blog想实现单点登录,如果三者采用的都是.NET开发(或者任何同一框架开发)方案很多,如果三个系统不是用同一框架开发,那么想整合实现单点登录,方案可能很局限2 Z6 Z! ~5 }: O: u& n; i2 {
但是Cookie实现单点登录,是一个通用的方案, 对应的域名和访问地址如下:1 f; b& h5 {- A5 l. l( S! F
门户网: aaa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aaa.cn& [3 m, ^# a, A$ L5 |! {5 n
(
2 D' E# J& T* z; l, p: L 如果是在本机测试,就是做个
$ f: f8 k. m* q% _; X host 127.0.0.1 www.aaa.cn3 D% \: K& Q& e2 \5 \. w! { A+ O
host 127.0.0.1 bbs.aaa.cn
& X, a+ }0 q% S8 { k5 _6 Y) [ host 127.0.0.1 blog.aaa.cn% o: ~" `* W9 G6 ?1 H: T( x8 j
)3 }, j) l2 s0 A5 l; G k, F
BBS: blog.aaa.cn http://blog.aaa.cn
( h$ l7 x; Q$ j% d! H2 v7 b* Y BLOG: bbs.aaa.cn http://bbs.aaa.cn
- ~6 C! S: f' l; ^ 通常解决方案:在统一登录页(假如在放在门户网aaa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:7 {* Q* u1 M1 f
1.aaa.cn\passport\WriteCookie.asp 5 K }, A) c' a% g+ I
<%
% i1 V7 F' l$ X/ z) e. n Response.Cookies("username")="xssh913913"5 Y' e1 G5 d' n1 _8 ~
Response.Cookies("username").Expires=Dateadd("m",1,now)
, X7 w1 T! P- ~7 L+ J% Y$ [0 X- X* F' k Response.Cookies("username").Domain="aaa.cn"
7 y, c$ Q+ Y& L( f, i 注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
, K. o) y8 |5 E# D5 C+ f# L8 d; b 注:domain:能够在浏览器端对cookie的发送进行限定
' c* q: t. v* L2 X4 g- L% ~ Response.Cookies("password")="xssh913913"' U( m l5 w# ^' L4 ]) Y
Response.Cookies("password").Expires=Dateadd("m",1,now)
E1 L% z' ~, }* ~* A* X Response.Cookies("username").Domain="aaa.cn"0 o5 R, B+ H( g- j8 N+ c+ ]
注意这里,我们要把Domain设置成aaa.cn,不能是www.aaa.cn,因为设置成www.aaa.cn,在bbs,blog里是读不到的,不信你试试,如果我们省略这句,默认是www.aaa.cn,所以必须手动的将其设置成aaa.cn
, E( Y9 x V# \5 Q) t# } 注:domain:能够在浏览器端对cookie的发送进行限定" `' g- v, \# ?/ O$ z7 p
%>
; `1 E/ k6 s! x: Z 2.BBS下验证用户是否登录的页面1 h4 H4 h$ m3 Q" N. A
<%
8 I9 y2 a8 q) g' m Response.Write Request.Cookies("username")$ H2 e/ a2 x) t+ l$ h" {
Response.Write Request.Cookies("password")% z4 A8 e7 O7 J7 B: B% p8 ]8 m! b+ `) q
Response.End()% h% Z6 E% v9 D8 O+ p
%>
# L( ?" u4 s# C' \3 y6 n 3.Blog下同理(和BBS一样)9 y0 l1 `. J- _; ?7 N8 F
<%
4 p4 `6 u* I* }0 h+ |; ? Response.Write Request.Cookies("username")
" P' t( B5 a+ T0 f0 r G8 L Response.Write Request.Cookies("password")* o( g3 K! s3 q M3 Q
Response.End()/ G E* @+ v" y8 \
%>9 C. \* [% C4 d n
好了,简单的单点登录就实现了,好象没有什么问题,有很多朋友也会问和我的题目不相干,不急,确认到目前为止,不会出现什么问题,但是如果你的域名是aa.cn,而不是aaa.cn,问题出现了,如何解决?慢慢来。。。" G9 D& e% ^" } G) O/ ~5 U3 Q
------------------------------------------------------------------------------------------------------------------------------------------------* s' K: {2 R' `
解决方案和上面一样
$ Q9 N$ O1 s+ S9 v w 对应的域名和访问地址如下:
9 X6 ^5 |# p; S( `! R% ]$ n1 e 门户网: aa.cn (CN域名小于5位的都会遇到) 对应访问地址:http://www.aa.cn( x* ~' J! r5 E$ s/ p
(9 e1 @, ?1 e0 e/ `7 X' w
如果是在本机测试,就是做个2 t8 p- [/ m |; w4 T, T
host 127.0.0.1 www.aa.cn1 Z/ R$ [# n" u0 y, V6 @% W, O
host 127.0.0.1 bbs.aa.cn5 P$ g9 s- w& Q+ V$ x7 e
host 127.0.0.1 blog.aa.cn1 r7 r! }- w. @) r& S Q& `
)
+ H7 ]$ |- x9 y4 v BBS: blog.aa.cn http://blog.aa.cn
8 n" p$ A/ v0 q BLOG: bbs.aa.cn http://bbs.aa.cn
. j0 i |( R4 W# V 通常解决方案:在统一登录页(假如在放在门户网aa.cn\passport\login.asp中)写入Cookie,然后在用户进入bbs,blog时直接读取门户网中写入的Cookie,简单代码如下:) B8 @5 ?. ]2 ~$ n1 Q
1.aa.cn\passport\WriteCookie.asp
& k8 Y' t2 H' f" d8 T2 D$ P) K <%
5 g2 x" M3 ]" M4 x! S b' } R; @ Response.Cookies("username")="xssh913913"
& O4 ^* Z+ J2 a' I4 W5 i Response.Cookies("username").Expires=Dateadd("m",1,now)0 _- O0 p a: o. Y! S8 _9 S
注意了3 a) W! {$ v3 \- v [
这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉
8 h' o7 x3 M* ~4 j 问题出来了吧。。。。。9 k/ }8 A; `$ c6 l# e
不急,到这里问题就出现在不能指定COOkie的Domian 值为aa.cn,如果我们省略设置domain属性,它默认就是www.aa.cn,显然在blog,bbs是读不到cookie的,怎么办?????
4 v# E/ r3 i- p( w, l( k9 C 解决方法:其实细心的朋友就会发现我们省略设置domain属性时,他默认的就是我们在host指定的,有点眉目了,既然我们在这里不能显示的指定domain的值为aa.cn,那么我们不显示设置doamin,而是修改我们的host,即:host 127.0.0.1 www.aa.cn---------改成------->aa.cn,前面说了,默认就是aa.cn
1 n, }8 i' N; J( p 服务器上一样
0 Y7 t8 d' u6 Y! S ok,搞定了
# S, J( T7 ]+ O" {8 N; G5 p Q 2 M0 u/ Q" Y/ V5 f' i. F
3 {0 W0 S# e: U$ A6 H
Response.Cookies("password")="xssh913913"
! U3 c$ Y" Y; X: o3 X Response.Cookies("password").Expires=Dateadd("m",1,now). C7 r4 m) a9 a: D, |8 t
注意了" f0 ?7 ]' |4 h$ o E
这里如果指定了Response.Cookies("username").Domain="aa.cn"就写不了COOKIE,所以这句去掉
+ j, ~ ]) G. }6 I/ v: R& [ v 问题出来了吧。。。。。7 e5 A* z' t' G6 w, z4 I" A& C; Y; b
%>
/ V7 Z% z: v% z, l. T 2.BBS下验证用户是否登录的页面, j. t+ F. T. c* R3 U; @' d) ]
<%) _7 j w7 q4 ]' Q3 w4 ]8 n
Response.Write Request.Cookies("username")4 |5 \/ B* Q7 c& L7 S1 W; h6 X6 A
Response.Write Request.Cookies("password")) {' Y# U- e# S: W% e0 A0 Z: X
Response.End()
/ n( e0 O" n# [/ o" k( O' n# K %># v2 @0 ^* D6 O* N/ N i
3.Blog下同理(和BBS一样)7 q& }7 {/ D" u4 L& A( I Y9 G
<%1 k6 w2 D% G9 U- S" D& K1 W
Response.Write Request.Cookies("username")
9 r0 T- i! h0 y N# e' D Response.Write Request.Cookies("password")5 g8 Z3 z& j) r: ~
Response.End()4 g( b' z$ B c5 R
%>
1 C' n- `* m. f* F9 I 提示:这个问题不会在Firefox出现-----奇怪
% g' q8 T8 N8 l3 p; ^: r- ?6 ] 看来是Microsoft的问题,Firefox没问题, 其他域名也没问题,就CN 域名有这个问题
7 H" G) c1 G; v2 R. N( H- a- ~( ^ 如果还有什么不解的地方,可以直接发email给我xssh913913@126.com
: Z' i1 t+ d4 w6 t
2 u: |1 o1 i! H' s" v9 p0 g& aTrackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1725882 |
|