全部 android asp.net C/C++ cshap IOS Java javascript nodejs perl php python ruby web容器 其他 前端 数据库 第三方平台 混合式APP 网络 系统 默认分类

cookie方法封装及cookie缺点分析

0 113
 1 var CookieUtil = {
 2  get: function(name) {
 3   var cookieName = encodeURIComponent(name) + "=",
 4    cookieStart = document.cookie.indexOf(cookieName),
 5    cookieValue = null;
 6   if(cookieStart > -1) {
 7    var cookieEnd = document.cookie.indexOf(";", cookieStart);
 8    if(cookieEnd == -1) {
 9     cookieEnd = document.cookie.length;
10    }
11    cookieValue = decodeURIComponent(document.getCookie.substring(cookieStart + cookieName.length, cookieEnd));
12   }
13   return cookieValue;
14  },
15  set: function(name, value, expires, path, domain, secure) {
16   var cookieText = encodeURIComponent(name) + "=" +
17    encodeURIComponent(value);
18   if(expires instanceof Date) {
19    cookieText += "; expires=" + expires.toGMTString();
20   }
21   if(path) {
22    cookieText += "; path=" + path;
23   }
24   if(domain) {
25    cookieText += "; domain=" + domain;
26   }
27   if(secure) {
28    cookieText += "; secure";
29   }
30   document.cookie = cookieText;
31  },
32  unset: function(name, path, domain, secure) {
33   this.set(name, "", new Date(0), path, domain, secure);
34  }
35 };
javascript;gutter:true;">//设置一个 cookie
CookieUtil.set("name", "wolfSoul"); 

//读取 cookie 的值
alert(CookieUtil.get("name")); // "wolfSoul"

//删除 cookie
CookieUtil.unset("name"); 
cookie有较高的扩展性和可用性,但也有其缺点:
首先:每个域的 cookie 总数是有限的,不过浏览器之间各有不同。如下所示
  • IE6 以及更低版本限制每个域名最多 20 个 cookie。
  • IE7 和之后版本每个域名最多 50 个。IE7 最初是支持每个域名最大 20 个 cookie,之后被微软的一个补丁所更新。
  • Firefox 限制每个域最多 50 个 cookie。
  • Opera 限制每个域最多 30 个 cookie。

当超过单个域名限制之后还要再设置 cookie,浏览器就会清除以前设置的 cookie。IE 和 Opera 会删 除最近最少使用过的(LRU,Least Recently Used)cookie,腾出空间给新设置的 cookie。Firefox 看上去 好像是随机决定要清除哪个 cookie,所以考虑 cookie 限制非常重要,以免出现不可预期的后果。 

其次:要考虑安全性问题。如果cookie被人拦截了,拦截者就可以取得所有的session信息。即使加密也也没有用,而拦截者也并不需要知道cookie的意义,这会引起安全方面的问题。 

热忱回答0

  • 加入年费大会员(20每年)
  • 热门标签

    猜你喜欢

    1. 《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据
    2. 程序员提升之道-人际交往篇
    3. 项目架构开发:业务逻辑层之领域驱动失血模型
    4. Alamofire源码解读系列(十一)之多表单(MultipartFormData)
    5. 10年地理信息行业之我见
    6. 简介vsftpd及搭建配置
    7. ZeroMQ初探
    8. Kafka: Consumer
    9. 20170404问题分析记录
    10. 设计模式8:外观模式

    衣食父母

    最近热帖

    1. 不带插件 ,自己写js,实现批量上传文件及进度显示 5
    2. 连载《一个程序猿的生命周期》-《发展篇》 - 10.欠薪的高薪和稳定的相对低薪,你会选择哪个? 6
    3. android网页分享到朋友圈问题求助? 6
    4. vue实现标签云效果 6
    5. 如何在前端模版引擎开发中避免使用eval函数 6
    6. 从String类型字符串的比较到StringBuffer和StringBuilder 6
    7. php利用gd实现图片的边框 6
    8. 谈谈java中遍历Map的几种方法 7
    9. angular之$watch、$watchGroup、$watchCollection 7
    10. ASP.NET MVC5(五):身份验证、授权 7

    随机文章

    1. 对于SQL的一段小总结
    2. python:让源码更安全之将py编译成so
    3. 《明解c语言》已看完,练习代码此奉上
    4. Html单选按钮自定义样式
    5. 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享