1.Cookie数量和长度的限制。各个浏览器的限制不同IE7+和Firefox最大限制为50条,chrome和Safari无限制,IE6-最大限制20条。且所有浏览器限制每个cookie长度不能超过4KB,否则会被截掉。

  所以:现代浏览器cookie个数不要超过50条,大小不能超过4KB;简而精。

2.安全性问题。客服端每次访问服务端都会携带cookie,cookie容易被人拦截,所有的session信息被公开。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。

  所以:cookie不要保存机密信息,让服务端来确保用户信息安全。

3.关于cookie的编码。原来的cookie编码大多使用escape和unescape进行编解码,这个编解码针对普通字母和数字以及*,+,-,.,/,@,_以外的其他字符,可以说是比较简单粗暴的。后来ECMAScript v3 已从标准中删除了escape进行编码,分解成了encodeURI(针对URL风格进行编码)和 encodeURIComponent(针对URL风格编码加上URI 组件的标点符号进行编码,比encodeURI要编码的字符更多)。一般来说cookie编码只需要能对"="和";"进行编码即可。

  所以在不能使用escape的情况下使用encodeURIComponent编码,decodeURIComponent解码。

4.cookie每次随HTTP请求一起发送,浪费宽带,移动端推荐使用localStorage。

5.使用方法

document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value)

  每执行一次上面的代码就会添加一个cookie,如果cookie中已经存在相同name的cookie则完全覆盖(这里的覆盖不仅仅只value值的覆盖,指的是覆盖一切当前name对应的cookie信息,比如失效时间expires属性、path属性等等)。

  一次只能添加一个cookie,除了第一个key/value对被认为是cookie值保存外,其他key/value对被认为是该cookie的属性。比如

document.cookie = "name=chua;expires="+(new Date("2016/1/6 11:44:30")).toGMTString();

  上面的代码被解释为cookie name在2016/1/6 11:44:30到期的

document.cookie = "name=chua;age=12";

  上面的代码解释为添加了一个cookie name=chua。这个cookie有一个属性age=12。但是很明显,age在cookie中没有意义。因为cookie除了本身的键和值能获取到,他相关的属性无法读取,只有浏览器知道。

  现在来说说cookie的几个属性(不详细讲,主要是使用的注意事项):

  expires:绝对失效时间,时间格式只支持GTM标准时间,所有浏览器都支持

  默认情况下cookie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户退出浏览器后这些值也会丢失;如果指定 expires 值,那么如果在时间没有过期的情况下cookie始终存在,即使关闭浏览器、关闭电脑。例子

document.cookie = "name=chua;expires="+(new Date("2016/1/6 11:44:30")).toGMTString();

  max-age:相对失效时间,格式是数字,单位秒

  说是expires现在已经被max-age属性所取代,但是实际上本人测试至少IE是不支持max-age的。所以,max-age的使用范围就只能说抱歉了。max-age和expires这两个属性控制cookie生命周期。 如果两个都设置了,以max-age为准

  path:指定与cookie关联在一起的网页

  在默认的情况下cookie会与创建它的网页,该网页处于同一目录下的网页以及与这个网页所在目录下的子目录下的网页关联

  domain:指定共享该cookie的域,只能是一个域内多个服务器共享cookie

  domain属性可以使多个web服务器共享cookie。domain属性的默认值是创建cookie的网页所在服务器的主机名。不能将一个cookie的域设置成服务器所在的域之外的域。

  news.baidu.com的服务器能够读取www.baidu.com设置的cookie值。如果www.baidu.com的页面创建的cookie把自己的path属性设置为“/”,把domain属性设置成“.baidu.com”,那么所有位于www.baidu.com,以及位于baidu.com域的其他服务器上的网页都可以访问这个cookie。

  secure:布尔值,传输类型(安全传输false/不安全传输true),默认是不安全传输

  它是一个布尔值,指定在网络上如何传输cookie,默认是不安全的,通过一个普通的http连接传输

  HttpOnly:设为true后,只能通过http访问,不能通过document.cookie获取。设定为httponly的键值,防止xss读取cookie。

  

  简易cookie读取函数

function getCookie(c_name){
var cookie = document.cookie;
if (cookie.length>0){
c_start = cookie.indexOf(encodeURIComponent(c_name) + "=");
if (c_start!=-1){
c_start = c_start + c_name.length+1;
c_end = cookie.indexOf(";",c_start);
if (c_end==-1) c_end = cookie.length;
return decodeURIComponent(cookie.substring(c_start,c_end))
}
}
return ""
}
function setCookie(c_name,value,expiredays){
var exdate = new Date()
exdate.setDate(exdate.getDate()+expiredays);
document.cookie = encodeURIComponent(c_name)+ "=" + encodeURIComponent(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

  如果觉得本文不错,请点击右下方【推荐】!

  

js基础篇——cookie使用要点的更多相关文章

  1. js基础篇——localStorage使用要点

    localStorage主要用来替代cookie,解决cookie(可参考cookie使用要点)读写困难.容量有限的问题.localStorage有以下几个特点 1.localStorage是一个普通 ...

  2. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  3. JS基础篇--sort()方法的用法,参数以及排序原理

    JS基础篇--sort()方法的用法,参数以及排序原理   sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort( ...

  4. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  5. js 基础篇(点击事件轮播图的实现)

    轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...

  6. Vue.js基础篇实战--一个ToDoList小应用

    距离开始学Vue已经过去一个多月了,总想把学到的东西柔和在一起,做点东西出来,于是有了这个Todolist小应用. 使用vuex 纯粹基础,没有用到web pack,vuex,npm,下次把它改造一下 ...

  7. js基础篇——call/apply、arguments、undefined/null

    a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...

  8. JS基础篇【1】

    该文讲解适用于有一定语言开发基础的朋友们,亦可当作久别重逢之回顾! 1.JS简介 JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记 ...

  9. 前端之js基础篇

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...

随机推荐

  1. sphinx教程

    http://www.php100.com/html/it/focus/2013/0916/6188.html### 以上一篇的email数据表为例: 数据结构: 01.CREATE TABLE em ...

  2. Mroonga 3.0.8 发布,MySQL 存储引擎

    Mroonga 3.0.8 支持 REPAIR TABLE 支持损坏的 groonga 数据库. Mroonga 是一个 MySQL 存储引擎,基于 Groonga,提供完整的全文搜索引擎.

  3. 【Win10 UWP】后台任务与动态磁贴

    动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...

  4. [WPF实用技巧]如何使WPF的TreeView节点之间有连线

    示例代码:TreeViewEx.zip 原文地址:http://www.codeproject.com/Tips/673071/WPF-TreeView-with-WinForms-Style-Fom ...

  5. mongodb( 实现join)

    mongodb提供ref和populate的方法,支持类似join的SQL操作.本文给出一个实际的例子: 1. 数据1: var daob = new Schema({ user: { type: S ...

  6. 我的第一篇Markdown语法博客

    这是我的第一篇使用markdown语法编写的博客 使用的编辑器为Sublime Text2 并且使用了sublog插件, sublog是一个开源项目 sublog 并且参考了作者的博客 AmongOt ...

  7. 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)

    讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...

  8. java提高篇(六)-----使用序列化实现对象的拷贝

    我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常 ...

  9. SQLServer 随机生成指定范围的日期

    一个分页的问题,DTCms3.0中,分页是根据时间分页的,如果当添加时间(add_time)都是同一个数值时,不管点击第几页,显示的数据都是同一个的内容,于是就有了需要把同一个时间改指定随机日期的功能 ...

  10. [编译] 1、第一个makefile简单例子

    前言 本篇用一个最简单的例子引入makefile,教你编写第一个makefile 正文 在Download/aa文件夹下有a.c和makefile文件 litao@litao:~/Downloads/ ...