JS操作cookie实现单点登录

对于单点域名共享登录信息,我建议使用cookie是比较好的。
用cookie是因为它可以共享信息。
cookie是不能跨域访问的,但是在二级域名是可以共享cookie的。
然后你把你的项目统一平台,域名也统一,这样就可以实现cookie的单点登录了。
比如:https://tieba.baidu.com
http://mp3.baidu.com
这样的就算是统一域名。而二级域名可以共享cookie。
cookie的四个可选属性:
1 cookie的生存期属性:expires;默认情况下,cookie只在浏览器会话期存在.退出浏览器就丢失;可以用expires设置时间;退出浏览器后就不会丢失并存为客户端浏览器的cookie文件;过了时间后cookie失效,还会自动删除cookie文件.
2 path属性:默认情况下,在同一个目录下文件可以调用;
3 domain属性:例如设成”.baidu.com”则在.baidu.com下的所有服务器下的文件都可以调用cookie.
4 安全属性:默认情况下为false;用http协议不安全传输;true:用https等协议安全传输.
Javascript代码

Javascript代码  收藏代码
  1. /**
  2. 函数名称:getCookie
  3. 函数功能:获取指定名称的cookie的值
  4. 输入参数:需要测试的字符串
  5. 返回参数:
  6. */
  7. function getSSOCookie()
  8. {
  9.     var arrStr = document.cookie.split(“; “);
  10.     for(var i = 0;i < arrStr.length;i ++){
  11.         var temp = arrStr[i].split(“=”);
  12.         if(temp[0] == “sso”) {
  13.           return unescape(temp[1]);
  14.         }
  15.     }
  16.     return “”;
  17. }
  18. /**
  19. 函数名称:addCookie
  20. 函数功能:添加cookie
  21. 输入参数:需要测试的字符串
  22. 返回参数:
  23. */
  24. function addSSOCookie(objValue)
  25. {
  26.     var str = “sso” + “=” + escape(objValue);
  27.     if(true){//为0时不设定过期时间,浏览器关闭时cookie自动消失
  28.         str += “; path=/”;
  29.     }
  30.     document.cookie = str;
  31. }
  32. /**
  33. 函数名称:delCookie
  34. 函数功能:删除cookie
  35. 输入参数:需要测试的字符串
  36. 返回参数:
  37. */
  38. function delCookie()
  39. {//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
  40.     var date =  new  Date();
  41.     date.setTime(date.getTime() – 10000);
  42.     document.cookie = “sso” + “=a; expires=” + date.toGMTString()+”; path=/”;
  43. }

用户在统一加载平台认证系统认证通过后,使用addSSOCookie,用户权限信息保存到了cookie中,其他平台通过调用getSSOCookie,取得用户信息。这样用户就可以不再受平台限制,而实现自由访问各个系统了。
在addSSOCookie方法中,没有设置cookie的失效时间,这样在浏览器关闭后,cookie就自动消失。注意:这样cookie的有效性只能在同一浏览器进程,如果重新打开了一个浏览器进程,cookie信息是获取不到的,也就是单点登录只能在同一个浏览器进程有效。如果想在不用浏览器进程中共享cookie信息,那就设置失效时间,如下:
Javascript代码

Javascript代码  收藏代码
  1. function addCookie(objValue,objHours){//添加cookie
  2.            var str = “sso”+ “=” + escape(objValue);
  3.             if(objHours > 0){//为0时不设定过期时间,浏览器关闭时cookie自动消失
  4.                 var date = new Date();
  5.                 var ms = objHours*3600*1000;
  6.                 date.setTime(date.getTime() + ms);
  7.                 str += “; expires=” + date.toGMTString()+”; path=/; domain=.hanj.com”;
  8.             }
  9.             document.cookie = str;
  10.         }

这样cookie在指定的时间后失效。但这样安全性不能保证,如果时间设置太短,用户在使用中,可能cookie就失效了,需要重新登录。如果时间过长,用户在下次访问,或电脑重起访问,cookie还在有效期中,有可能别其他人使用。cookie不能准确的删除,存在安全隐患。