zoukankan      html  css  js  c++  java
  • 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'");

  • 相关阅读:
    HTML5 实现Link跳线效果
    在TWaver的Tree节点上画线
    用TWaver加载大型游戏场景一例
    22万个木箱!TWaver 3D极限压榨
    如何在MONO 3D寻找最短路路径
    如何创建TWaver 3D的轮廓选中效果
    巧用TWaver 3D 矢量图形功能
    如何实现TWaver 3D颜色渐变
    HDU 1390 Binary Numbers
    HDU 1328 IBM Minus One
  • 原文地址:https://www.cnblogs.com/fuyoucaoyu/p/6589782.html
Copyright © 2011-2022 走看看