项目之间Cookie的共享

2024-09-01 00:58
文章标签 项目 共享 之间 cookie

本文主要是介绍项目之间Cookie的共享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于某些大型项目的开发,可能会将一个项目拆分成若干个子项目进行开发,但是项目之间的某些页面之间通过某些入口是可以相互跳转的,因此,对于有些会话的状态也是需要共享的,例如国际化,子系统A在切换语言环境后跳转到子系统B,用户第一次进入B系统页面时的语言环境应该是和跳转前A系统是一致的,一般开发过程中,会将语言信息存储到Cookie或者Session乃至可以是第三方缓存中,例如Redis,今天就先谈一下,如何实现项目之间的Cookie共享。

例如有两个项目,都会执行这一ajax,这一接口的作用是将数据传到服务端,对传入数据对应的JavaBean进行基于JSR303的注解校验,并将结果返回给客户端,返回的信息是何种语言是根据cookie中存储的语言决定的。

[javascript] view plain copy
print ?
  1. $.ajax({  
  2.      url: "http://localhost:8888/ssm/interfaces/test/m006",  
  3.      type: "POST",  
  4.      async: false,  
  5.      dataType: "json",  
  6.      contentType: "application/json",  
  7.      cache: false,  
  8.      data: JSON.stringify({  
  9.        "id""bgdsdgs",  
  10.        "name""name",   
  11.        "email""429661318@qq.com",  
  12.        "voModel2": [{  
  13.          "id""429661318@qq.com",  
  14.          "v3": {"id":"sdfghjkl"}  
  15.        }]  
  16.      }),  
  17.      success: function(data) {  
  18.        console.log(data.errorDetail);  
  19.        $("#aa").html(JSON.stringify(data));  
  20.      },  
  21.      error: function() {  
  22.      }  
  23.    })  
 $.ajax({url: "http://localhost:8888/ssm/interfaces/test/m006",type: "POST",async: false,dataType: "json",contentType: "application/json",cache: false,data: JSON.stringify({"id": "bgdsdgs","name": "name", "email": "429661318@qq.com","voModel2": [{"id": "429661318@qq.com","v3": {"id":"sdfghjkl"}}]}),success: function(data) {console.log(data.errorDetail);$("#aa").html(JSON.stringify(data));},error: function() {}})

给出一个设置cookie的js方法,为了说明原理,不用jQuery-cookie等第三方库

[javascript] view plain copy
print ?
  1. function setCookie(c_name, value, expiredays){  
  2.      var exdate=new Date();  
  3.     exdate.setDate(exdate.getDate() + expiredays);  
  4.     document.cookie=c_name+ "=" + escape(value)   
  5.                       + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());  
  6. }  
function setCookie(c_name, value, expiredays){var exdate=new Date();exdate.setDate(exdate.getDate() + expiredays);document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

1、先在第一个工程下的页面下的控制台执行setCookie(“lang”,”en_US”),添加名为lang,值为en_US的cookie
这里写图片描述
这时多出了一条cookie
这里写图片描述
此时刷新页面,得到的信息就是英文信息
这里写图片描述

2、这时在第二个页面直接访问相同的接口,但是出现的依然是中文信息。
这里写图片描述
虽然访问的是同一个接口,而且都是根据当前的cookie值来确定语言的,并且cookie的值是一样的,为什么一边是中文二另一边却是英文呢。
根据上面的图可以看出,cookie除了name,value,expire等信息以外,还有domain和path属性,domain就是当前域,默认为请求的地址,如网址为www.jb51.NET/test/test.aspx,那么domain默认为www.jb51.net,path默认就是当前项目的根目录,path和domain只要有一个不同,那就表示跨域,无法实现共享,而不同项目之间domain可能相同,而path一定是不同的。
因此在设定cookie的时候可以domain和path也一起设置,为了实现共享,两个项目应该设置成一样的。修改上面设置cookie的方法,具体设置什么要视情况而定

[javascript] view plain copy
print ?
  1. function setCookie(c_name, value, expiredays){  
  2.      var exdate=new Date();  
  3.     exdate.setDate(exdate.getDate() + expiredays);  
  4.     document.cookie=c_name+ "=" + escape(value)   
  5.                       + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())  
  6.                       +";path=/"  
  7.                       +";domain=localhost";  
  8. }  
function setCookie(c_name, value, expiredays){var exdate=new Date();exdate.setDate(exdate.getDate() + expiredays);document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/"+";domain=localhost";
}

至此实现了cookie的共享,现在一个项目改变cookie中的语言环境信息,另一个项目也会跟着一起变了。
ps:
1、对于cookie,名称一样的情况下,如果path,domain不同,两条cookie依然可以共存,而取的cookie默认是范围最小的那个,即当前path和domain下的,所以无论如何也不会是其他domain和path下面的cookie。
2、
Java中设置cookie的方法

[java] view plain copy
print ?
  1. Cookie cookie = new Cookie("lang""zh_CN");  
  2. // 设置domain  
  3. cookie.setDomain("localhost");  
  4. // 设置path  
  5. cookie.setPath("/");  
  6. // 设置以后无法再前端document中看到该cookie,提高了安全性  
  7. cookie.setHttpOnly(true);  
  8. // 过期时间,秒为单位,  
  9. // 小于0表示保存在内存中,关闭浏览器cookie就消失,  
  10. // 等于0表示立即删除该cookie  
  11. // 大于0保存在硬盘上  
  12. cookie.setMaxAge(1);  
  13. // 创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证  
  14. cookie.setSecure(false);  

转载自:http://blog.csdn.net/smq29661318/article/details/51025905
        Cookie cookie = new Cookie("lang", "zh_CN");// 设置domaincookie.setDomain("localhost");// 设置pathcookie.setPath("/");// 设置以后无法再前端document中看到该cookie,提高了安全性cookie.setHttpOnly(true);// 过期时间,秒为单位,// 小于0表示保存在内存中,关闭浏览器cookie就消失,// 等于0表示立即删除该cookie// 大于0保存在硬盘上cookie.setMaxAge(1);// 创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证cookie.setSecure(false);

这篇关于项目之间Cookie的共享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125497

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin