Cookie写入之path的坑:不同页面出现不同的Cookie

更新日期: 2020-06-16 阅读: 3k 标签: cookie

今天遇到一个cookie的问题: 域为http://xxx.com/index.htm与http://xxx.com/xxx/a-1.htm 的 cookie相同键,传递参数后出现不同值。搞了半天终于发现问题所在:原来是我关于cookie的基础知识没搞清楚 。。。。

Cookie不仅仅有名字和值两个属性,还有域(domain),过期时间(expires),路径(path)等属性。 其中,不同的域、不同的路径下可以存在同样名字的cookie。


问题

我在/page/index/index.html中向浏览器添加了一个useid的cookie(这里没有指定path), 然后试着从/page/demo/demo.html中取值,发现无法取到,
通过开发者工具查看发现userid的path是/page/index/, 所以无法在page/demo/下面取到, 解决办法就是在添加cookie时指定path为/page/, 这时page目录下的所有页面都可以获取到userid

另外, path只能设置为绝对路径


js操作cookie

添加cookie

/**
 * 添加cookie
 * @param {String} objName
 * @param {String} objValue
 * @param {Number} objHours
 */
function addCookie(objName,objValue,objHours){
	var str = objName + "=" + escape(objValue);
	
	if(objHours > 0){ // 如果不设定过期时间, 浏览器关闭时cookie会自动消失
		var date = new Date()
		var ms = objHours * 3600 * 1000;
		
		date.setTime(date.getTime() + ms);
		str += "; expires=" + date.toGMTString() + "; path=/page/;"; // 指定了cookie的path
	}
	
	document.cookie = str;
}

获取cookie

/**
 * 获取指定名称的cookie值
 * @param {Object} objName
 */
function getCookie(objName) {
	var arrStr = document.cookie.split("; ");
	
	for (var i = 0; i < arrStr.length; i ++) {
		var temp = arrStr[i].split("=");
		
		if(temp[0] == objName) return unescape(temp[1]);
	}
}

删除cookie

/**
 * 删除指定名称的cookie值
 * @param {Object} objName
 */
function delCookie(objName) {
	var exp = new Date();
	exp.setTime(exp.getTime() - 1);
	var cval = getCookie(objName);
	if (cval != null) {
		document.cookie = objName + "=" + cval + "; expires=" + exp.toGMTString() + "; path=/page/;"; // 指定了cookie的path
	}
}

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/9325

相关推荐

使用vue-cookies处理cookie

创建:this.$配置时候设置的名称.set(\\\'cookies的key\\\',value),获取指定的key:this.$配置时候设置的名称.get(\\\'cookies的key`),获取所有keys返回为数组的形式:this.$配置时候设置的名称.keys (\\\'cookies的key`)

关于cookie domain中的点前缀

浏览器已经接收指令,之前在一级域名下存储了相关的信息。这里为了简化问题,假设我们有两个应用A和B,域名分别为:a.b.com和c.a.b.com。(显然B是A的一个子域)。

使用vue-cookies操作cookie

在vue中如果想要操作cookie,除了使用之前我们自己封装好的操作cookie的方法之外,我们还可以使用vue-cookies插件,这是一个简单的Vue.js插件,专门用于在vue中处理浏览器的cookie操作

js实现cookie有效期至当次日凌晨

实际开发中有要求用户一些行为每天一次,次日开始重新回复功能,一般前端都是通过cookie来记住用户的操作,然后进行判断当日是否还有机会,这时候需要给存储的cookie值一个有效期,让次日自动失效,重新计数,代码如下:

angular + nodejs + CORS 实现跨域不丢失cookie做法

angular的4200端口 向 nodejs的8080端口 发送一个post请求, 这会造成跨域问题,跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制

Js操作Cookie

Web 服务器和 HTTP 服务器是无状态的,因此当 Web 服务器将网页发送到浏览器时,连接会被断开,服务器会忘记与用户相关的所有内容。那么浏览器和 Web 服务器是怎样记住用户信息的?cookie 被发明出来解决这个问题。

使用js实现对cookie的增删改查

存储cookie(key为test;value为testValue);而在cookie的名中我们可以控制,但要保存的值是不确定的,怎么办呢?这时就需要用escape()函数进行编码,它能将一些特殊符号使用十六进制表示

JS中设置cookie,读取cookie,删除cookie

Cookie 是在您的计算机上存储在小的文本文件中的数据。当 web 服务器向浏览器发送网页后,连接被关闭,服务器会忘记用户的一切。Cookie 是为了解决“如何记住用户信息”而发明的:若要想修改某个cookie,只需要用此种方法

通过JS检测客户端是否禁用Cookie

Cookie的英文原意是指就着牛奶一起吃的点心。在互联网世界中,Cookie是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。

jquery之cookie操作_jquery.cookie.js

定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术;下载与引入:jquery.cookie.js基于jquery;先引入jquery,再引入:jquery.cookie.js

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!