精华内容
下载资源
问答
  • 主要介绍了如何使用localstorage代替cookie实现跨域共享数据问题,本文给大家带来了实现方案,使用postmessage和localstorage进行数据跨域共享问题,感兴趣的朋友一起看看吧
  • 适用于Asp。 在主域名设置的Cookie,在各子域名共用;适用于博客等提供二级域名。这个问题,以网上有众多帖子,可惜都没有完整解决。
  • session共享
  • NULL 博文链接:https://justcoding.iteye.com/blog/747398
  • SSO单点登录【基于cookie二级域名下跨域共享】的简单实现。
  • JavaScript跨域共享方法

    2017-04-26 16:24:32
    javascript最全的10种跨域共享的方法
  • 该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对...在此共享,你值的拥有
  • 文章目录面试官意图问题思路解决方案基于NFS的Session共享基于数据库的Session共享基于Cookie的Session共享基于Memcache的Session共享总结 面试官意图 问题思路 解决方案 基于NFS的Session共享 NFS是Net FileSystem...

    面试官意图

    问题思路

    解决方案

    基于NFS的Session共享

    NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。

    这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可,缺点是NFS依托 于复 杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

    基于数据库的Session共享

    首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普 遍在 使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

    基于Cookie的Session共享

    这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式, 统一 种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现 用户的Cookie化Session 在多服务间的共享访问。

    这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带 宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

    基于Memcache的Session共享

    Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势,目前本人所经历的项目达到2000/秒 平均查询,并且服务器CPU消耗依然不到10%。

    另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了 过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。

    总结

    基于Memcache 的存储是这几个方案中推荐选用的!

    其它方案依然有其使用的场合,具体选用哪套需要开发人员的根据当前的服务器资源、网站并发压力等综合评估。

    参考:
    PHP多台服务器跨域SESSION共享

    **************************** 只要思想不滑坡,办法总比困难多****************************
    展开全文
  • cookie跨域共享

    千次阅读 2019-07-20 23:30:20
    使用二级域名共享cookie有一个限制条件,就是两个域名的二级域名必须相同 前端pc访问域名:a.b.com 后端接口域名:a-gateway.b.com 这两个域名同属一个二级域名:b.com 跨域访问 服务器nginx增加以下配置,即可...

    问题描述

    需要解决前端pc跟服务端(java),跨域后都能获取到同一个cookie。
    使用二级域名共享cookie有一个限制条件,就是两个域名的二级域名必须相同

    前端pc访问域名:a.b.com
    后端接口域名:a-gateway.b.com
    这两个域名同属一个二级域名:b.com

    跨域访问

    服务器nginx增加以下配置,即可解决跨域访问的问题。也可以在程序中通过代码解决跨域访问。

    • nginx配置文件
    location / {
        #是否允许跨域发送Cookie
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Origin 'http://a.b.com';
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
    
        if ($request_method = 'OPTIONS') {
            return 204;
        }
    }
    

    跨域携带发送cookie

    如果需要允许跨域携带发送cookie的话,nignx则需要以下参数配置

    • nginx配置
    1. “Access-Control-Allow-Credentials”:可选字段。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。
    2. 对于附带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为’*’。这是因为请求的首部中携带了Cookie信息,如果 Access-Control-Allow-Origin 的值为’*’,请求将会失败。而将 Access-Control-Allow-Origin 的值设置为 http://a.b.com,则请求将成功执行。也就是说Access-Control-Allow-Credentials设置为true的情况下
      Access-Control-Allow-Origin不能设置为*。
    • 前端配置
      以vue请求为例:
    import axios from 'axios';
    axios.defaults.withCredentials=true //允许携带cookie
    
    • java设置cookie
    public static void  addCookie(HttpServletResponse response,String cookieName,String cookieValue,int maxAge){
        Cookie cookie  =new Cookie(cookieName,cookieValue);
        cookie.setDomain("b.com");//指定域名
        cookie.setPath("/");//设置cookie的生命周期
        cookie.setHttpOnly(false);
        if(maxAge>0){
            cookie.setMaxAge(maxAge);
        }
        response.addCookie(cookie);
    }
    
    展开全文
  • Session跨域共享demo

    2016-08-26 09:06:25
    参考的官网上的sessions共享,调整对高版本的framework的适应,采用vs2015 。可直接采用生成的cmodel
  • 一、Session跨域 所谓session跨域就是摒弃了系统(tomcat)提供的session,而使用自定义的类似Session的机制来保存客户端数据的一种解决方案。如:通过设置cookie的domain来实现cookie的跨域传递。在cookie中传递一个...

    一、Session跨域
    所谓session跨域就是摒弃了系统(tomcat)提供的session,而使用自定义的类似Session的机制来保存客户端数据的一种解决方案。如:通过设置cookie的domain来实现cookie的跨域传递。在cookie中传递一个自定义的session_id。这个session_id是客户端的唯一标记。将这个标记作为key,将客户端需要保存的数据作为value,在服务端进行保存(数据库保存或NOSQL)。这种机制是Session的跨域解决。

        什么是域,在应用模型中一个完整的,有独立访问路径的功能集合称为一个域。如,百度称为一个应用或系统。百度下有若干的域,如搜索引擎(www.baidu.com)百度贴吧(tie.baidu.com),百度知道,百度地图等。域信息有时也称为多级域名。域的划分,以IP,端口,主机名,域名为标准,实际划分。localhost / 127.0.0.1
    
        什么是跨域,客户端请求的服务器,IP,端口,域名,主机名任何一个不同,都称为跨域。
    

    使用cookie跨域共享,是session跨域的一种解决方案。cookie.setDomain() 为cookie设定有效域范围,cookie.setPath() 为cookie设定有效URI范围。以上两个方法就实现了cookie跨域。这是在开发中性价比最高的跨域解决方案。

    二、Spring Session 共享 (了解)
    spring-session技术是spring提供的用于处理集群会话共享的解决方案。spring-session技术是将用户session数据保存到三方存储容器中。如:MySQL,redis等。
    Spring-session技术是解决同域名下的多服务器集群session共享问题的。不能解决跨域session共享问题。所以互联网开发中越来越少使用这门技术。

    实现步骤:

    1. 配置一个spring 提供的filter,实现数据拦截保存并转换为spring-session需要的会话对像。

    2)必须提供一个数据库的表格信息(由spring-session提供,找spring-session-jdbc.jar/org/springframework/session/jdbc/*.sql,根据具体的数据库找对应的SQL文件,做表格的创建)。
    spring-session表:保存客户端session对象的表格。
    spring-session-attributes表:保存客户端session中的attributes属性数据的表格。
    spring-session框架是结合Servlet技术中的HttpSession完成的会话共享机制。在代码中是直接操作HttpSession对象的。

     

    spring-session共享.png

    三、Nginx Session共享

    nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session。ip_hash是在upstream配置中定义的,具体如下:

    ## 自定义被代理的域名和实际服务器地址。
    upstream www.test.com {
    server 192.168.74.131:8080;
    server 192.168.74.131:8081;
    ip_hash;
    }

    server {
    listen 80;
    server_name www.test.com; ## server_name要与自定义的upstream一致。
    location / {
    proxy_pass http://www.test.com; ## 添加代理路径。
    }
    }

    ip_hash 是通过请求端的ip地址计算hash值,与后端服务器定位。由于相同的ip计算出的hash值都是一样的,所以同一台机器的请求每次都可以落到相同的服务器上。但这种方式的局限性太大。比如,客户端请求的ip是动态的,对应的后端服务器出现故障。这些都使session共享变得不可用。所以使用ip_hash方式实现的session共享不是一个最佳的解决方案。

    四、Token 机制
    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录大概的流程是这样的:

    1. 客户端使用用户名、密码请求登录。
    2. 服务端收到请求,去验证用户名、密码。
      验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端。
    3. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 、Session Storage里。
    4. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
      服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。服务端验证源的Token存储在redis/mogodb/关系型数据库 等。

    五、JSON Web Token(JWT)机制
    JWT是一种紧凑且自包含的,用于在多方传递JSON对象的技术。传递的数据可以使用数字签名增加其安全行。可以使用HMAC加密算法或RSA公钥/私钥加密方式。
    紧凑:数据小,可以通过URL,POST参数,请求头发送。且数据小代表传输速度快。
    自包含:使用payload数据块记录用户必要且不隐私的数据,可以有效的减少数据库访问次数,提高代码性能。
    JWT一般用于处理用户身份验证或数据信息交换。
    用户身份验证:一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源。单点登录是当今广泛使用JWT的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。
    数据信息交换:JWT是一种非常方便的多方传递数据的载体,因为其可以使用数据签名来保证数据的有效性和安全性。
    官网: jwt.io

    JWT数据结构

    JWT的数据结构是 : A.B.C。 由字符点‘.’来分隔三部分数据。
    A - header 头信息
    B - payload (有效负载)
    C - Signature 签名

    Header

    数据结构: {“alg”: “加密算法名称”, “typ” : “JWT”}
    alg是加密算法定义内容,如:HMAC SHA256 或 RSA
    typ是token类型,这里固定为JWT。

    payload

    在payload数据块中一般用于记录实体(通常为用户信息)或其他数据的。主要分为三个部分,分别是:已注册信息(registered claims),公开数据(public claims),私有数据(private claims)。

    payload中常用信息有:iss(发行者),exp(到期时间),sub(主题),aud(受众)。前面列举的都是已注册信息。
    公开数据部分一般都会在JWT注册表中增加定义。避免和已注册信息冲突。
    公开数据和私有数据可以由程序员任意定义。注意:即使JWT有签名加密机制,但是payload内容都是明文记录,除非记录的是加密数据,否则不排除泄露隐私数据的可能。不推荐在payload中记录任何敏感数据。

    Signature

    签名信息。这是一个由开发者提供的信息。是服务器验证的传递的数据是否有效安全的标准。在生成JWT最终数据的之前。先使用header中定义的加密算法,将header和payload进行加密,并使用点进行连接。如:加密后的head.加密后的payload。再使用相同的加密算法,对加密后的数据和签名信息进行加密。得到最终结果。

    JWT执行流程

    JWT执行流程

    #JWT核心赖
    <dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.3.0</version>
    </dependency>

    #java开发JWT的依赖jar包
    <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
    </dependency>

    关键代码

    public class JWTUtils {
    
    // 服务器的key。用于做加解密的key数据。 如果可以使用客户端生成的key。当前定义的常亮可以不使用。
    private static final String JWT_SECERT = "test_jwt_secert" ;
    private static final ObjectMapper MAPPER = new ObjectMapper();
    public static final int JWT_ERRCODE_EXPIRE = 1005;//Token过期
    public static final int JWT_ERRCODE_FAIL = 1006;//验证不通过
    
    public static SecretKey generalKey() {
        try {
            // byte[] encodedKey = Base64.decode(JWT_SECERT); 
            // 不管哪种方式最终得到一个byte[]类型的key就行
            byte[] encodedKey = JWT_SECERT.getBytes("UTF-8");
            SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
            return key;
        } catch (Exception e) {
            e.printStackTrace();
             return null;
        }
    }
    /**
     * 签发JWT,创建token的方法。
     * @param id  jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
     * @param iss jwt签发者
     * @param subject jwt所面向的用户。payload中记录的public claims。当前环境中就是用户的登录名。
     * @param ttlMillis 有效期,单位毫秒
     * @return token, token是一次性的。是为一个用户的有效登录周期准备的一个token。用户退出或超时,token失效。
     * @throws Exception
     */
    public static String createJWT(String id,String iss, String subject, long ttlMillis) {
        // 加密算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        // 当前时间。
        long nowMillis = System.currentTimeMillis();
        // 当前时间的日期对象。
        Date now = new Date(nowMillis);
        SecretKey secretKey = generalKey();
        // 创建JWT的构建器。 就是使用指定的信息和加密算法,生成Token的工具。
        JwtBuilder builder = Jwts.builder()
                .setId(id)  // 设置身份标志。就是一个客户端的唯一标记。 如:可以使用用户的主键,客户端的IP,服务器生成的随机数据。
                .setIssuer(iss)
                .setSubject(subject)
                .setIssuedAt(now) // token生成的时间。
                .signWith(signatureAlgorithm, secretKey); // 设定密匙和算法
        if (ttlMillis >= 0) { 
            long expMillis = nowMillis + ttlMillis;
            Date expDate = new Date(expMillis); // token的失效时间。
            builder.setExpiration(expDate);
        }
        return builder.compact(); // 生成token
    }
    
    /**
     * 验证JWT
     * @param jwtStr
     * @return
     */
    public static JWTResult validateJWT(String jwtStr) {
        JWTResult checkResult = new JWTResult();
        Claims claims = null;
        try {
            claims = parseJWT(jwtStr);
            checkResult.setSuccess(true);
            checkResult.setClaims(claims);
        } catch (ExpiredJwtException e) { // token超时
            checkResult.setErrCode(JWT_ERRCODE_EXPIRE);
            checkResult.setSuccess(false);
        } catch (SignatureException e) { // 校验失败
            checkResult.setErrCode(JWT_ERRCODE_FAIL);
            checkResult.setSuccess(false);
        } catch (Exception e) {
            checkResult.setErrCode(JWT_ERRCODE_FAIL);
            checkResult.setSuccess(false);
        }
        return checkResult;
    }
    
    /**
     * 
     * 解析JWT字符串
     * @param jwt 就是服务器为客户端生成的签名数据,就是token。
     * @return
     * @throws Exception
     */
    public static Claims parseJWT(String jwt) throws Exception {
        SecretKey secretKey = generalKey();
        return Jwts.parser()
            .setSigningKey(secretKey)
            .parseClaimsJws(jwt)
            .getBody(); // getBody获取的就是token中记录的payload数据。就是payload中保存的所有的claims。
    }
    
    /**
     * 生成subject信息
     * @param subObj - 要转换的对象。
     * @return java对象->JSON字符串出错时返回null
     */
    public static String generalSubject(Object subObj){
        try {
            return MAPPER.writeValueAsString(subObj);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }
    }
    

    token保存位置

        使用JWT技术生成的token,客户端在保存的时候可以考虑cookie或localStorage.cookie保存方式,可以实现跨域传递数据。localStorage是域私有的本地存储,无法实现跨域。推荐用cookie,各浏览器兼容性高。
    

    webstorage,localStorage,sessionStorage

    webstorage可保存的数据容量为5M.且只能存储字符串数据。
    webstorage分为localStorage和sessionStorage。
    localStorage的生命周期是永久的。关闭页面或浏览器后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
    sessionStorage是会话相关的本地存储单元,生命周期是仅当前会话下有效。sessionStorage引入一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。(这个与创建cookie时不设置超时时间效果一样)。



    作者:nerowu
    链接:https://www.jianshu.com/p/0177b09866ea
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 【解决方案】跨域共享信息层级关系的域名的信息共享无层级关系的域名的信息共享 层级关系的域名的信息共享 首先,我们需要知道cookie的作用的域名是domain本身及domain下的所有子域名。 以test.la,login.test.la,...


    层级关系的域名的cookie共享

    首先,我们需要知道cookie的作用的域名是domain本身及domain下的所有子域名。

    test.lalogin.test.laarticle.test.la为例,login.test.laarticle.test.la作为test.la的子域名,在跨域共享信息的时候,我们只需要将需要共享的信息放置于test.la域名下即可。

    譬如共享登录信息,在通过login.test.la域名登录后,将登录信息置于test.la下,访问article.test.la,前端通过从test.la域下拿cookie信息,从而达到共享的目的。

    /**
         *
         * @param name  cookie的key
         * @param value cookie的value
         */
        public static Cookie buildCookie(String name, String value, String domain) {
            Cookie cookie = new Cookie(name, value);
            // 设置时间
            cookie.setMaxAge();
            cookie.setDomain(domain);
            // 设置路径
            cookie.setPath("/");
            return cookie;
        }
    

    这里需要注意一下cookie时间和路径的设置,cookie存储在本地内存里,maxAge默认值为-1,此时只要关闭浏览器,cookie就会消失。设置为0,表示从内存中删除此cookie。

    浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。(其设置的最大保存时长也是有限制的)

    第二个注意的地方是路径,cookie默认设置的路径是当前访问的路径,如果不指明设置在根路径下,有时会出现明明设置成功了,但却一直读取不到的情况。


    无层级关系的域名的cookie共享

    两个完全不同的域名,如test.latest.com,如何共享cookie?这里有本人实践过的两种解决方案。

    • 譬如在test.la登陆后,后端设置cookie,前端将cookie保存至Storage中,然后访问test.com时,以jsonp的方式(test.la域名)进行请求接口A,后端的接口A将会拿到test.la域下的cookie,并以jsonp形式返回,实现test.com域名下也能共享该cookie。
     @RequestMapping("/getLoginInfo")
        public void getLoginInfo(HttpServletRequest request, HttpServletResponse response) {
    	   // 这里是封装的一个cookie获取类,可以自己获取对应的cookie
           String accessToken = CookieUtil.getValue("access_token", request);
           response.setHeader("Access-Control-Allow-Origin", "*");
           response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
           response.setHeader("Access-Control-Max-Age", "36000");
           response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
           response.setHeader("Access-Control-Allow-Credentials","true");
    
           JsonObject jsonObject = new JsonObject();
           jsonObject.addProperty("access_token", accessToken);
       
           String callBack = request.getParameter("callback");
           // jsonp形式返回
            try {
                if (StringUtils.isBlank(callBack)) {
                    response.getWriter().append(new Gson().toJson(jsonObject));
                } else {
                    response.getWriter().append(callBack + "(" + new Gson().toJson(jsonObject) + ")");
                }
                return;
            } catch (IOException e) {
               LOGGER.error("跨域失败 :" + e);
            }
        }
    
    • 另一种方法,在test.la登陆后,设置cookie到test.la下,然后由前端发起一个js请求接口A(https://test.la/A),后端接口A做redirect重定向到后端接口B(https://test.com/B),在B接口设置cookie到test.com
     @RequestMapping("/redirect")
     // 参数t为域名, 如例子中的test.com
        public String redirect(String t, HttpServletRequest request) {
            if (StringUtils.isBlank(t)) {
                throw new BusinessException("域名参数不能为空");
            }
            // 截取域名后3段, 判断是否合法
            String target = getRealDomain(t);
            if (!defaultDomain(target)) {
                throw new BusinessException("域名不合法" + t);
            }
            // 结合例子,这里我们就从`test.la`获取cookie, 然后作为参数
            String value = CookieUtil.getValue("access_token", request);
            LOGGER.info("浏览器跨域请求 : {}, {}", t, value);
            return "redirect:https://youli." + t + "/api/user/web/set?t=" + value;
        }
    
        private String getRealDomain(String domain) {
            String[] array = domain.split("\\.");
            if (array.length <= 3) {
                return domain;
            }
            StringBuilder builder = new StringBuilder();
            for (int i = 1; i < array.length; i++) {
                builder.append(".").append(array[i]);
            }
            return builder.substring(1);
        }
    
        private boolean defaultDomain(String target) {
            String[] array = domains.split(",");
            for (String domain : array) {
                if (domain.equals(target)) {
                    return true;
                }
            }
            return false;
        }
    
        @RequestMapping("/set")
        @ResponseBody
        public ResultData<?> set(String t, HttpServletRequest request, HttpServletResponse response) throws URISyntaxException {
            if (StringUtils.isBlank(t)) {
                throw new BusinessException("cookie参数不能为空");
            }
            // 截取域名后3段, 判断是否合法
            URI uri = new URI(request.getRequestURL().toString());
            String domain = StringUtils.substring(uri.getHost(),StringUtils.indexOf(uri.getHost(),".") + 1);
            LOGGER.info("设置的域名:" + domain);
            String target = getRealDomain(domain);
            LOGGER.info("设置的target:" + domain);
            if (!defaultDomain(target)) {
                throw new BusinessException("域名不合法" + t);
            }
            response.setHeader("Access-Control-Allow-Credentials","true");
            response.setHeader("p3p","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
            response.setContentType("text/javascript;charset=UTF-8");
    
    
            ResponseCookie cookie = ResponseCookie.from("access_token", target) // key & value
                    .httpOnly(true)         // 禁止js读取
                    .secure(true)           // 在http下也传输
                    .domain(domain)         // 域名
                    .path("/")              // path
                    .maxAge(DateTimeUtil.getSecondTimestamp() + 3600 * 24 * 360 * 10)  
                    .sameSite("None")
                    .build()
                    ;
            response.addHeader("Set-Cookie", cookie.toString());
            return new ResultData<>();
        }
    
    展开全文
  • 跨域共享session

    2019-03-22 17:39:58
    两个网站: think.local ...即可获取与think.local一致的session值,从而实现共享session。 PS:可以做跨域名登录了,如果是不同服务器,可以考虑将session信息存入数据库/Redis/Memcached等.
  • 主要介绍了PHP简单实现HTTP和HTTPS跨域共享session解决办法,本文讲解的方法相对简单,需要的朋友可以参考下
  • Session跨域共享问题解决

    万次阅读 2018-09-14 10:43:49
    1.Session跨域存在的问题 不同的域名下,Session无法共享。即设定用户在www.a.com登录,后端在Session中放入了用户的username和age,用户从www.a.com跳转到www.b.com,无法获取到Session中的用户信息。 演示: ...
  • 在客户端编程语言中,如javascript 和ActionScript,同源策略是...同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢? ...
  • 前端cookie跨域共享

    千次阅读 2019-01-10 14:50:31
    cookie跨域共享 const common = {}; common.getCookie = function (name) { var arr, reg = new RegExp(&quot;(^| )&quot; + name + &quot;=([^;]*)(;|$)&quot;); if (arr = document.cookie....
  • 由此可见,在开发过程中运行本地项目,对于前端来说,想要实现浏览器跨域共享cookie,必须设置浏览器的实验属性。 在Chrome 地址栏输入chrome://flags打开Chrome 实验。 通过设置SameSite by default cookies、C
  • 有时候,我们在工作中需要共享盘,但是又不在同一个域内,这样的话,我们一般可以通过手动在地址栏输入路径,然后弹出登录窗口,我们手动输入用户名和密码,一般来说,这样是可行的,但是这样的操作麻烦的要命。...
  • 实现cookie跨域共享的两种方式

    千次阅读 2021-03-24 20:44:58
    (如何实现跨域主要参考这里)如何实现cookie跨域共享?cookie的概念cookie的特性跨多域共享cookie( a.com和b.com共享 ) 跨域概念 在域a下通过 ajax 的方式访问域b下的资源。 域相同满足的条件:域名相同(子域名不同...
  • cookie跨域共享的实现方案

    千次阅读 2020-07-23 17:46:43
    由于工作需要,花费了较多的时间处理跨域的问题,未避免遗忘,特此记录。 1.跨域的场景: 第一种:协议不同; 第二种: 域名不同; 第三种:端口不同; 2.跨域的关键点: 首先,跨域(CORS)需要浏览器和...
  • JSONP 跨域共享信息

    2020-12-01 16:55:16
    由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而 HTML 的 [removed] 元素是一个例外。利用 [removed] 元素的这个开放策略,网页可以得到从其他来源动态产生...
  • 问题描述:后台接口需要用到session,但是获取到的值一直为null 解决详情
  • session跨域共享问题解决方案

    千次阅读 2018-02-10 10:21:51
    在讨论session跨域共享问题之前,我们首先要了解session做了什么,没做到什么 HTTP是无状态的,也就是说服务器不知道谁访问过他,但是有时候,又需要我们去保留这个状态比如说用户的登录信息,如果每次访问都要...
  • 主要介绍了PHP实现cookie跨域session共享的方法,结合实例形式分析了php操作cookie的有效期、跨域、session存储等相关操作技巧,需要的朋友可以参考下
  • 主要介绍了http与https跨域共享session的解决方法,需要的朋友可以参考下
  • 分布式session的共享及cookie跨域共享

    千次阅读 2018-02-06 17:32:02
    本文将简单介绍一下分布式环境下session共享问题、跨域名来共享cookie及多终端session的统一。 一:分布式session的共享 既然是一个分布式 Session的处理框架,必然会重新实现 HttpSession的操作接口,使得...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,719
精华内容 15,087
关键字:

跨域共享