这里只讲跨子域名的单点登陆,适合有一定基础及了解的人看
假设有站点a.xxx.com和站点b.xxx.com(俩站点为跨子域名的站点)
1、既然要实现单点登陆,那么这两个站点必须有共同的数据来进行状态传递,也就是我们平时说的token
2、在站点a.xxx.com进行登陆成功后,对cookie赋一个值,key=token,value=abc123;
HttpCookie cookie = new HttpCookie("c_token","abc123");
cookie.Domain = "xxx.com";//跨域的关键
Response.AppendCookie(cookie);
3、但是因为域名不一样,我们在请求b.xxx.com的时候,理论上,是不会将a.xxx.com的cookie带到b.xxx.com去了,这时候关键点就是上面给cookie赋值时的cookie.Domain = "xxx.com";
这句代码的意思,就是cookie将会给所有以xxx.com结尾的域名请求时,附带上我们的cookie;
4、也就是说我们在请求b.xxx.com时,也会有key=token,value=abc123的cookies;这时候我们就能知道,用户登陆过了,然后拿我们的token拿去验证有效性,即可决定是否让用户免登陆;
5、注销时,要用这种方法设置cookies过期,这样就可以一下子注销所有子域名站点
HttpCookie cookie = Response.Cookies["c_token"];
cookie.Expires = DateTime.Now.AddDays(-20);
cookie.Domain = "yyy.com";
而下面这种方法注销是无效的
Response.Cookies.Remove("c_token");
注:
1、这两个站点中间,必须有个用户中心,去验证用户的帐号密码、生成token、验证token、返回用户信息;
2、完全跨域的方法也是大同小异,要点只在于,在完全跨域的情况下,如何共享cookie