cookie常见操作

本文围绕JS操作cookie展开,介绍了cookie基础,如最大存储4kb、格式、有效期等;指出存在的问题及清除方式;说明了简单存取、读取、设置有效期等用法;还讲解了高级设置,包括路径、域、安全性和编码等方面,以确保cookie正确使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js操作cookie

cookie基础

  1. cookie最大不能存放超过4kb的数据,否则返回空string;
  2. cookie以文件形式存储在本地,读取方便,所以尽量不要非加密存储重要信息;
  3. cookie格式: key=value;
  4. cookie有效期: 默认是关闭浏览器清除;设置有效期expires可以存在本地直到过期失效;
  5. cookie在常规状态下时不能跨域的,除非有特殊设置。cookie也不能被非本目录和子目录下的其他目录访问;

cookie问题

  1. cookie存在的两种类型: 访问的网站本身的cookie;第三方的cookie,来自帅其他的域;
  2. cookie的清除方式: 浏览器清除。设置失效日期清除;
  3. 浏览器可以设置是否允许访问cookie;
  4. 出于性能考虑,降低cookie使用数量,尽量使用小cookie;

cookie用法

  1. 简单存取:
    简单实例:
    	document.cookie = 'username=Dwyer'
    
    ‘username’ 表示cookie名称,'Dwyer’表示其值;如果名称不存在即创建新的cookie,否则就是修改cookie;
  2. cookie的读取:
    操作字符串即可完成读取。例子援引w3school:
    	function getCookie(c_name){
    		if (document.cookie.length>0){  //先查询cookie是否为空,为空就return ""
    			c_start=document.cookie.indexOf(c_name + "=")  //通过String对象的indexOf()来检查这个cookie是否存在,不存在就为 -1
    				if (c_start!=-1){ 
    					c_start=c_start + c_name.length+1  //最后这个+1其实就是表示"="号啦,这样就获取到了cookie值的开始位置
    					c_end=document.cookie.indexOf(";",c_start)  //其实我刚看见indexOf()第二个参数的时候猛然有点晕,后来想起来表示指定的开始索引的位置...这句是为了得到值的结束位置。因为需要考虑是否是最后一项,所以通过";"号是否存在来判断
    					if (c_end==-1) c_end=document.cookie.length
    						return unescape(document.cookie.substring(c_start,c_end))  //通过substring()得到了值。想了解unescape()得先知道escape()是做什么的,都是很重要的基础,想了解的可以搜索下,在文章结尾处也会进行讲解cookie编码细节
    					} 
    				}
    			return ""
    		}
    
  3. 设置有效期:
    可以通过expires来设置有效期:
      document.cookie = "name=value;expires=date"
    
    援引w3school例子如下:
    	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());
    	}
    	使用方法:setCookie('username','Darren',30)
    
    此例是以天来设置cookie过期时间。

cookie高级设置

  1. 路径
    cookie一般是由于用户访问页面而被创建的,但是其他页面也是可能访问得到本页面的cookie的。
    默认情况下,只有创建在同一目录和子目录下的网页才能访问,但是 "http://www.cnblogs.com"或者 “http://www.cnblogs.com/xxxx/” 就不可以访问这个 cookie。
    设置cookie的路径可以让cookie被其他目录和父级目录访问;
    	document.cookie = ''name=value;path=currentPath"
    	document.cookie = "name=value;expires=date;path=currentPath"
    
    其中currentPath就是cookie的路径,最常用的是将cookie放在根目录下,这样当前域内的所有页面都可以访问cookie;

  2. cookie的同域之间的访问:
    	document.cookie = "name=value;path=currentPath;domain=currentDomain"
    
    currentDomain就是要设置的cookie的域;
    例如 “www.qq.com” 与 “sports.qq.com” 公用一个关联的域名"qq.com",我们如果想让 “sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 “/”。例:
    	document.cookie = "username=Darren;path=/;domain=qq.com"
    
    注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。
  3. 安全性
    为cookie加上一个属性"secure",默认值为空。其就会通过https协议进行传输,但是依旧不会对本地的cookie信息进行加密。
    	document.cookie = "username=Darren;secure"
    
  4. 编码
    在输入cookie信息时不能包含空格,分号,逗号等特殊符号,而在一般情况下,cookie 信息的存储都是采用未编码的方式。所以,在设置 cookie 信息以前要先使用escape()函数将 cookie 值信息进行编码,在获取到 cookie 值得时候再使用unescape()函数把值进行转换回来。如设置cookie时:
      document.cookie = name + "="+ escape (value)	
    
    再看看基础用法时提到过的getCookie()内的一句:
    	return unescape(document.cookie.substring(c_start,c_end))	
    
    这样就不用担心因为在cookie值中出现了特殊符号而导致 cookie 信息出错了

参考链接:https://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值