cookie方法封装及cookie缺点分析

 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 };
//设置一个 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 条评论
登录 后参与评论

相关文章

来自专栏海天一树

Python Selenium爬取百度百科旅游景点的基本信息

在与python文件同级的目录下创建scenic_spots_5A_namelist.txt,内容为

1232
来自专栏macOS 开发学习

macOS 应用开发小集锦

输出结果与当前app的语言环境有关(默认为English),如果需要修改工程的语言环境,需要设置Edit Scheme...

1062
来自专栏Java3y

从零开始写项目第二篇【登陆注册、聊天、收藏夹模块】

登陆模块目标 我要将其弄成类似的登陆,功能是要比较完善的。 ? 本来我是想做一步写一步的,但是发现这样文章就会太乱,因为要改的地方太多了。前面写过的,后边就被修...

1.2K8
来自专栏郭少华

Spring boot Mybatis-XML方式使用Druid连接池(四)

3934
来自专栏Java技术栈

Ehcache介绍及整合Spring实现高速缓存

Ehcache介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它使用的是J...

3629
来自专栏IT笔记

JAVA实现的微信扫描二维码支付

吐槽一下 支付项目采用springMvc+Dubbo架构实现,只对外提供接口。 话说,为什么微信支付比支付宝来的晚了那么一点,一句话,那一阵挺忙的,然后就没有时...

1.5K8
来自专栏Java开发

SpringMVC整合Shiro

摘要: SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。

5172
来自专栏Zephery

谈谈个人网站的建立(八)—— 缓存的使用

一、概述 1.1 缓存介绍 系统的性能指标一般包括响应时间、延迟时间、吞吐量,并发用户数和资源利用率等。在应用运行过程中,我们有可能在一次数据库会话中,执行多次...

3826
来自专栏JavaQ

使用Spring Data Redis实现数据缓存

引言 目前很多系统为了解决数据读写的性能瓶颈,在系统架构设计中使用Redis实现缓存,Spring框架为了让开发人员更加方便快捷的使用Redis实现缓存,对Re...

3746
来自专栏刘望舒

Android系统启动流程(四)Launcher启动过程与系统启动流程

前言 此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:L...

2518

扫码关注云+社区

领取腾讯云代金券