js基础篇——cookie使用要点
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使用要点的更多相关文章
- js基础篇——localStorage使用要点
localStorage主要用来替代cookie,解决cookie(可参考cookie使用要点)读写困难.容量有限的问题.localStorage有以下几个特点 1.localStorage是一个普通 ...
- 前端面试题目汇总摘录(JS 基础篇)
JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...
- JS基础篇--sort()方法的用法,参数以及排序原理
JS基础篇--sort()方法的用法,参数以及排序原理 sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort( ...
- 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)
温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- Vue.js基础篇实战--一个ToDoList小应用
距离开始学Vue已经过去一个多月了,总想把学到的东西柔和在一起,做点东西出来,于是有了这个Todolist小应用. 使用vuex 纯粹基础,没有用到web pack,vuex,npm,下次把它改造一下 ...
- js基础篇——call/apply、arguments、undefined/null
a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...
- JS基础篇【1】
该文讲解适用于有一定语言开发基础的朋友们,亦可当作久别重逢之回顾! 1.JS简介 JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记 ...
- 前端之js基础篇
JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...
随机推荐
- Asp.net MVC4 与 Web Form 并存
Web Forms 与 MVC 的asp.net 基础架构是相同的.MVC 的路由机制并不只MVC 特有的,它与WebForm 也是共享相同的路由机制.Web Forms 的Http请求针 ...
- MySql Windws 下自动备份脚本
这几天正在做一个 使用MySQL数据库的项目,目前项目已经完成了,当部署好项目之后,正在考虑如何自动备份MySql数据库的问题,我在网上找了一下资料终于解决了,特此记录一下. @echo off e ...
- 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。
[TypeScript]如何在TypeScript中使用async/await,让你的代码更像C#. async/await 提到这个东西,大家应该都很熟悉.最出名的可能就是C#中的,但也有其它语言也 ...
- Java虚拟机11:运行期优化
前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再 ...
- Spring RabbitMq概述
Spring AMQP consists of a handful of modules, each represented by a JAR in the distribution. These m ...
- PC远程调试移动设备
我们在移动端进行前端开发时,会遇到一个让人头痛但不得不面对的问题——调试. 在 PC 机器上,我们有功能强大的 Chrome DevTools.Firebug,即便是老版本的 IE ,我们也可以安装微 ...
- git版本管理策略及相关技巧(A)
公司几乎所有的项目都是使用 git 仓库来管理代码,以前对 git 只有些肤浅的了解,每次提交代码或者上线的时候总是会提心吊胆,生怕出现一些未知的问题.经过三个月的踩坑和填坑, git 操作颇显成熟. ...
- Java多线程系列--“JUC锁”05之 非公平锁
概要 前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析.内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基 ...
- CGLib与JDKProxy的区别
Spring AOP 的实现主要有两种:CGLib与JDK自带的Proxy. 他们主要的区别是,需要JDKProxy修改的类必须实现接口(因此也只能代理public方法),在创建Proxy时可以使用c ...
- Redis学习笔记~Redis主从服务器,读写分离
回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布 ...