javascript操作cookie

1.什么是cookie

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。--w3school

cookie是Web浏览器存储的少量数据,在浏览器和服务器之间传输,可以通过客户端脚本(javascript)和服务器端语言(如php)实现cookie的存取。

2.javascript操作cookie

cookie是以键值对的形式保存的, 每个cookie的格式都是这样的:<cookie名>=<值>;名称和值都必须是合法的标示符。各个cookie之间一般是以“;”分隔。
1. 设置cookie,要保存变量的值("rose")到cookie中,username为这个cookie的名称,rose为这个cookie的值,则相应的JS代码为:
       document.cookie='username=rose';
 由于cookie的名/值中的值不允许包含分号,逗号和空白符,因此,在存储前一般采用编码函数对值进行编码,在读取时需采用对应的函数解码
document.cookie="username="+encodeURIComponent(value);
2.读取cookie
function getcookie(){
    var cookie={};//初始化最后要返回的对象
    var all=document.cookie;//获取所有的cookie值
    if(all==="")
      return cookie;//检查cookie是否为空
    //使用split分离名值对
     var list=all.split(";");
   //遍历每个cookie
    for(var i=0;i<list.length;i++){
      var cookie=list[i];
    //查找第一个“=”
      var p=cookie.indexOf("=");
     //获取cookie名字
      var name=cookie.substring(0,p);
     //获取对应的值
      var value=cookie.substring(p+1);
     //对值解码
      value=decodeURTComponent(value);
     //将名值对存储到对象中
      cookie[name]=value;
}
   return cookie;
}

3.cookie属性

1.有效期:
cookie默认的有效期很短暂,它只能持续在web浏览器的会话期间,一旦用户关闭浏览器,cookie保存的数据就丢失了。还好我们可以通过设置(max-age)来延长cookie的有效期
   document.cookie="name=rose;max-age=date";
完整代码为:
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','rose',30)
2.作用域:
cookie作用域是通过文档源和文档路径来确定的,该作用域也可以通过cookie的path(路径)和domain(域)属性配置。
默认情况下,只有与创建 cookie 的页面在同一个目录或子目录下的网页才可以访问,这个是因为安全方面的考虑,造成不是所有页面都可以随意访问其他页面创建的 cookie。
(1)路径:

在 "http://www.cnblogs.com/kikyo_code/" 这个页面创建一个cookie,那么在"/kikyo_code/"这个路径下的页面如: "http://www.cnblogs.com/kikyo_code/archive/2016/3/07/Cookie.html"这个页面默认就能取到cookie信息。

 可在默认情况下, "http://www.cnblogs.com"或者 "http://www.cnblogs.com/xxxx/" 就不可以访问这个 cookie。

如果把路径设置成"/",那么该cookie对任何http://www.cnblogs.com这台服务器上的页面都是可见的。

   document.cookie = "name=rose;path=/"
(2)域:

例如 "order.example.com" 与 "catalog.example.com" 公用一个关联的域名"example.com",我们如果想让 "order.example.com" 下的cookie被 "catalog.example.com" 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 "/"。

document.cookie = "username=rose;path=/;domain=example.com"
注意:cookie的域只能设置为当前服务器的域。

3.安全

cookie还有一个属性是secure,它是一个布尔类型属性,用来表示cookie的值以哪种方式来传递。cookie默认的是以不安全的形式(HTTP)传递的,可以通过设置secure来规定cookie以HTTPS或者其它安全协议传递。

  document.cookie = "username=rose;secure"

4.清除cookie

cookie 有两种清除方式:
通过浏览器工具清除 cookie (有第三方的工具,浏览器自身也有这种功能)
通过设置 cookie 的有效期来清除 cookie
注:删除 cookie 有时可能导致某些网页无法正常运行

5.cookie的利与弊

缺点:
1.cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。把cookie设置为secure,只保证 cookie 与服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
优点:极高的扩展性和可用性,分担了服务器的负担
1.通过加密和安全传输技术,减少cookie被破解的可能性。
2.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
3.控制cookie的生命期,使之不会永远有效,被盗者可能拿到一个过期的cookie。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值