Cookie 同域单点登录最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下)。但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录。单点登录:多个不同系统整合到统一加载个平台,用户在任何一个系统登录后,可以访问这个统一加载上的所有系统。登录之后,用户的权限和信息不再受某个系统的限制,即使某个系统出现故障(包括统一加载平台),其他系统还是能正常使用的。这就需要用户权限等信息保存到客户端,不受服务器的限制。在cookie相关文档信息中,提到cookie是不能跨域访问的,但是在二级域名是可以共享cookie的。这样就是我们的项目有了局限性,必须将多个系统的域名统一,作为二级域名,统一平台提供使用主域名。这样就可以实现cookie的单点登录了。在这里介绍一下cookie:1.cookie是一个存储在客户端的字符串属性,可以用它对当前网页的cookie进行读,写,增.删等操作;javascript能够用document对象的cookie属性对cookie进行操作;2.cookie的四个可选属性:2.1 cookie的生存期属性:expires;默认情况下,cookie只在浏览器会话期存在.退出浏览器就丢失;可以用expires设置时间;退出浏览器后就不会丢失并存为客户端浏览器的cookie文件;过了时间后cookie失效,还会自动删除cookie文件.2.2 path属性:默认情况下,在同一个目录下文件可以调用;
例如:http://hanj.com/c1/1.html设置的cookie可以被http://hanj.com/c1/2.html调用.但不能被http://hanj.com/c2/目录下的文件调用;
但如把path属性设成"/";则在http://hanj.com/下的所有文件都可调用此cookie.2.3 domain属性:例如设成".hanj.com"则在.hanj.com下的所有服务器下的文件都可以调用cookie.2.4 安全属性:默认情况下为false;用http协议不安全传输;true:用https等协议安全传输.3.cookie的局限性:浏览器最多保存300个cookie;为单个web服务器的最多只能保存20个cookie;每个cookie不能超过4000个字节.单点登录实现环境:统一平台域名:www.hanj.com子系统1:a.hanj.com子系统2:b.hanj.com子系统3:c.hanj.com统一加载平台和各子系统都是不同的服务器,统一加载平台提供登录认证服务,在统一加载平台认证系统上登录后,用户都可以被其他的系统识别。/**
函数名称:getCookie
函数功能:获取指定名称的cookie的值
输入参数:需要测试的字符串
返回参数:
*/
function getSSOCookie()
{var arrStr = document.cookie.split("; ");for(var i = 0;i < arrStr.length;i ++){var temp = arrStr[i].split("=");if(temp[0] == "sso") {return unescape(temp[1]);}}return "";
}
/**
函数名称:addCookie
函数功能:添加cookie
输入参数:需要测试的字符串
返回参数:
*/
function addSSOCookie(objValue)
{var str = "sso" + "=" + escape(objValue);if(true){//为0时不设定过期时间,浏览器关闭时cookie自动消失str += "; path=/";}document.cookie = str;
}/**
函数名称:delCookie
函数功能:删除cookie
输入参数:需要测试的字符串
返回参数:
*/
function delCookie()
{//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间var date =  new  Date();date.setTime(date.getTime() - 10000);document.cookie = "sso" + "=a; expires=" + date.toGMTString()+"; path=/";
}用户在统一加载平台认证系统认证通过后,使用addSSOCookie,用户权限信息保存到了cookie中,其他平台通过调用getSSOCookie,取得用户信息。这样用户就可以不再受平台限制,而实现自由访问各个系统了。在addSSOCookie方法中,没有设置cookie的失效时间,这样在浏览器关闭后,cookie就自动消失。注意:这样cookie的有效性只能在同一浏览器进程,如果重新打开了一个浏览器进程,cookie信息是获取不到的,也就是单点登录只能在同一个浏览器进程有效。如果想在不用浏览器进程中共享cookie信息,那就设置失效时间,如下:function addCookie(objValue,objHours){//添加cookievar str = "sso"+ "=" + escape(objValue);if(objHours > 0){//为0时不设定过期时间,浏览器关闭时cookie自动消失var date = new Date();var ms = objHours*3600*1000;date.setTime(date.getTime() + ms);str += "; expires=" + date.toGMTString()+"; path=/; domain=.hanj.com";}document.cookie = str;}这样cookie在指定的时间后失效。但这样安全性不能保证,如果时间设置太短,用户在使用中,可能cookie就失效了,需要重新登录。如果时间过长,用户在下次访问,或电脑重起访问,cookie还在有效期中,有可能别其他人使用。cookie不能准确的删除,存在安全隐患。
Cookie跨域单点登录
为了快速、简单的实现这一功能,首先想到就是通过JS操作Cookie并让两个不同域的cookie能够相互访问,这样就可达到了上述的效果,具体实现过程大致可分以下两个步骤:1、在A系统下成功登录后,利用JS动态创建一个隐藏的iframe,通过iframe的src属性将A域下的cookie值作为
get参数重定向到B系统下b.aspx页面上;var _frm = document.createElement("iframe");
_frm.style.display="none";
_frm.src="http://b.com/b.jsp?test_cookie=xxxxx";
document.body.appendChild(_frm);   2、在B系统的b.aspx页面中来获取A系统中所传过来的cookie值,并将所获取到值写入cookie中,这样就简单的实现了cookie跨域的访问; 不过这其中有个问题需要注意,就是在IE浏览器下这样操作不能成功,需要在b.aspx页面中设置P3P HTTP Header就可以解决了(具体詳細信息可以参考:http://www.w3.org/P3P/),P3P设置代码为:
/*
*也可以在html加入标记
<meta http-equiv="P3P" content='CP="IDC DSP COR CURa ADMa  OUR IND PHY ONL COM STA"'>
*/
Response.AppendHeader("P3P", "CP='IDC DSP COR CURa ADMa  OUR IND PHY ONL COM STA'");

Cookie同域,跨域单点登录相关推荐

  1. cookie跨域,实现单点登录

      Cookie 跨域,实现单点登录 Table title                         最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现 ...

  2. 将一个域下的cookie传到另一个域_单点登录那些事儿(二)同域下的单点登录

    单点登录(SSO,Single Sign On)对我们来说已经不陌生了,一次登录,处处登录.企业旗下都是自己的应用系统,所有的应用系统都使用同一个一级域名,通过不同的二级域名来区分应用系统.例如:百度 ...

  3. Web应用跨域访问及单点登录解决方案汇总

    做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.Ajax的跨域访问问题是现有的Aj ...

  4. java单点登录跨域_深入浅出让你理解跨域与SSO单点登录原理与技术

    原标题:深入浅出让你理解跨域与SSO单点登录原理与技术 一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互 ...

  5. 共同父域下的单点登录

    共同父域下的单点登录 标签: SSO 2014-03-04 22:38 12686人阅读 评论(17) 收藏 举报 分类: Java Web(12) 作者同类文章X 版权声明:本博客所有的原创文章,作 ...

  6. 举个栗子!Tableau 技巧(158):如何实现双域的服务器单点登录

    单点登录(SingleSignOn,SSO),是指用户只需一次登录就可以访问所有相互信任的应用系统,不需要管理员对用户的登录状态或其他信息进行修改. 实际分析应用中,很多企业都有单点登录的需求.例如: ...

  7. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录

    对于跨应用程序的 ASP.NET Forms 身份验证,相信大家应该都不陌生,几年前很多文章都介绍了如何实现,比如 MSDN 的 跨应用程序进行 Forms 身份验证,唐朝程序员 的 ASP.NET站 ...

  8. asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

    一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...

  9. java cookie p3p_利用P3P实现单点登录和COOKIE的跨域读写

    首先说明,同一个顶级域名的情况我不说什么,很简单,就一个Cookie的Domain属性. 下面来说顶级域名不同的情况. 有时候我们会有这么一种需求:当我们登录A网站www.a.com时,同时也要能登录 ...

  10. 前端把cookie写在父域里_单点登录的三种实现方式

    前言 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的.当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保 ...

最新文章

  1. java中如何把时间封装成类,java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象?...
  2. 嵌入式Linux内存压力测试
  3. 一个简单好用的Android Tab 设计与实现
  4. ajax(Tibco) 与 SQL server 2005(5)
  5. SpringBoot 实现固定、动态定时任务 | 三种实现方式 | 附源代码
  6. PIC单片机入门_同步/异步通信技术基础
  7. asp.net core 使用Mysql和Dapper
  8. 风变编程python笔记_自学Python和风变编程
  9. C++读取和写入文件(fstream等)
  10. 利用Vmware workstation安装MS-DOS使用Turbo C 2.0
  11. ArcGIS中提供的北京54与wgs84坐标转换方法及参数
  12. IDM下载器使用教程
  13. 自动控制原理:一阶系统的时域分析
  14. 存储函数与存储过程的区别
  15. 怎么用python画四叶草_如何使用python绘图四叶草
  16. 电脑计算机无法找到脚本文件夹,电脑开机老是提醒无法找到脚本文件的处理方法...
  17. torch.nn.CosineSimilarity() 三维张量
  18. 38岁女儿不恋爱没有稳定工作老母亲愁哭
  19. 我们需要多大的电视?
  20. Java基础-OOP 面向对象编程

热门文章

  1. C语言 数组中插入一个数
  2. EasyExcel基本操作看这一篇文章就够了
  3. 各领域机器学习数据集汇总(附下载地址)
  4. javax.crypto.Cipher类--加密和解密
  5. 分享一款在线视频播放器:h-player
  6. python音频加速_python将音频进行变速的操作方法
  7. 初探Java设计模式------观察者模式
  8. 面向大数据异构系统的神威并行存储系统
  9. 滤波算法、中值和均值滤波区别
  10. C语言入门篇----system命令