JS实现跨域(jsp与php)存取cookie实现获取登陆用户信息

1 篇文章 0 订阅
1 篇文章 0 订阅
JS实现跨域存取cookie实现获取登陆用户信息

在Javascript脚本里,一个cookie 实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了 name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、 domain域、以及 secure安全。

Expires – 过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。

Path – 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果http://www.zdnet.com/devhead /index.html 建立了一个cookie,那么在http://www.zdnet.com/devhead/目录里的所有页面,以及该目录下面任何子目录里的页面都可以 访问这个cookie。这就是说,在http://www.zdnet.com/devhead/stories/articles 里的任何页面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http: //www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html设置的cookes,该怎么办?这时,我们要把cookies 的path属性设置成“/”。

在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子: 如果想让 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共享cookies,就要把path设成“/devhead”。

Domain – 域。指定关联的WEB服务器或域。值是域名,比如zdnet.com。这是对path路径属 性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies,该怎么办? 我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。不能把cookies域属性设置成与设置它的服务器的 所在域不同的值。

Secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是 “secure”,或者为空。缺省情况下,该属性为空,也就是 使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本 地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

问题:现在有两个项目,php网站和javaweb网站,现在二者都在阿里云服务器上部署,现在需要用户在本地浏览器登陆javaweb,而本地php项目需要获取javaweb的登录用户信息,如何实现?
解决方案:通过cookie的跨域存储实现。
具体代码:
(1)、 javaweb的js存信息

	setCookies("onlineuserid", result);
	function setCookies(name,value){  

			var Days = 30;   //cookie 将被保存30天

			var exp  = new Date();   //获得当前时间

			exp.setTime(exp.getTime() + Days*24*60*60*1000);  //换成毫秒

			document.cookie =name + "="+ value + ";expires=" + exp.toGMTString()+";path=/;domain=39.106.99.208";  

			}   

此处的domain需要设置为php项目的域名,此处我设置为两个项目所在的服务器Ip,所以此cookie两个项目都可以访问。
(2)、php项目取cookie

var onlineuserid="";
getCookie();
 function getCookie() {    
for(var i=0;i<document.cookie.split(";").length;i++){
		var online=document.cookie.split(";")[i].split("=");
		if(online[0]==" onlineuserid"){
			onlineuserid=online[1];
		}
}
getalldevice();
}
function getalldevice(){
	$('#tab tr:not(:first)').remove();
	postdata = {
			onlineuserid:onlineuserid
	};
	$.post("api.php?service=App.Device.Getalldevice",postdata,
	function(data){
		if(data.ret == 200){
			var devs = data.data.devices;
			devices = devs;
			getallpros();
			addsystem();
			getallpts();
			if(devs.length > 0){
				$.each(devs,function(index,item){
					var trstr = "<tr><td>"+item.id+"</td><td>"+item.name+"</td><td>"+item.systemname+"</td><td>"+item.sn+"</td><td>"+item.ptname+"</td><td>"+item.create+"</td><td><a href='javascript:void(0);' role='button' onclick=\"edit("+item.id+")\"> <i class='icon-edit''></i></a> <a href='javascript:void(0);' role='button' onclick=\"del("+item.id+",'"+item.name+"')\"> <i class='icon-remove' style='color:#f00;'></i></a></td></tr>";
					$("#tab").append(trstr);
				});
			}
		}
	}, "json"); 
}

此处将cookie取出处理后就可得到所存数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据引用\[1\]和引用\[2\]的内容,验证了cookie是不能跨域的,即使最终的服务端是一起的也不可以跨越。所以在JavaScript中,无法直接通过设置cookie实现跨域存取。这是由浏览器的同源策略所限制的。同源策略要求两个网页的协议、域名和端口号必须完全相同,否则就会被认为是跨域请求。 如果需要在不同域名之间进行跨域存取cookie,可以考虑以下解决方案: 1. 使用服务器端代理:通过在同一域名下的服务器端设置代理,将跨域请求转发到目标域名,然后在目标域名上进行cookie存取操作。 2. 使用跨域资源共享(CORS):在目标域名的服务器端设置响应头,允许来自其他域名的请求访问,并在JavaScript中发送跨域请求,通过服务器端的设置来实现cookie存取。 需要注意的是,以上解决方案都需要在服务器端进行相应的配置和处理,以确保安全性和合法性。同时,还需要注意浏览器的兼容性和对CORS的支持情况。 如果你有具体的代码需求,可以参考引用\[3\]中的示例代码,其中包含了设置和获取cookie的示例。 #### 引用[.reference_title] - *1* *2* *3* [Cookie详解与跨域问题](https://blog.csdn.net/weixin_40482816/article/details/114140909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值