• Cookie 跨域 和 SSO


    cookie是不能跨域访问的,但是在二级域名是可以共享cookie

    cookie的四个可选属性:
    1、 cookie的生存期属性:expires;
    默认情况下,cookie只在浏览器会话期存在.退出浏览器就丢失;
    可以用expires设置时间;退出浏览器后就不会丢失并存为客户端浏览器的cookie文件;
    过了时间后cookie失效,还会自动删除cookie文件.
    2、 path属性:默认情况下,在同一个目录下文件可以调用;
    例如:http://hanj.com/c1/1.html设置的cookie可以被http://hanj.com/c1/2.html调用.但不能被http://hanj.com/c2/目录下的文件调用;
    但如把path属性设成"/";则在http://hanj.com/下的所有文件都可调用此cookie.
    3、 domain属性:例如设成".hanj.com"则在.hanj.com下的所有服务器下的文件都可以调用cookie.
    4、 安全属性:默认情况下为false;用http协议不安全传输;true:用https等协议安全传输.

    浏览器最多保存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=/";
    }

    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'");

  • 相关阅读:
    2017/12/30Java基础学习——增强型for嵌套遍历在二维数组中的应用
    2017/12/30Java基础学习——复制数组のSystem.arraycopy()方法讲解
    2017/12/30Java基础学习——排序算法の选择法与冒泡法的比较
    2017/12/31Java基础学习——二维数组排序の数组工具类Arrays的方法综合运用
    2017/12/31Java基础学习——使用同一个值,填充整个数组のArrays.fill(a, number)方法
    2017/12/31Java基础学习——判断两个数组是否相同のArrays.equals(a, b)方法
    2017/12/31Java基础学习——查找数组元素位置のArrays.binarySearch()方法介绍
    HDU2030 汉字统计【输入输出流】
    HDU4509 湫湫系列故事——减肥记II【格式输入+存储设置+暴力+水题】
    HDU2567 寻梦【输入输出流】
  • 原文地址:https://www.cnblogs.com/fuyoucaoyu/p/6589782.html
Copyright © 2020-2023  润新知