在他处看到一篇好文章,想记录在自己的学习笔记中,原文作者看到我转载若是介意,联系我立马就删除,附上原文链接:
http://blog.csdn.net/sunhengzhe/article/details/46694039

首先要明确一下cookie的概念,因为HTTP协议是一种无状态协议,也就是说一旦服务器和客户端的数据交换完毕后,他们之间的连接就会被断开,再次交换数据的时候就需要再次建立连接,这就意味着服务器无法从连接上判断客户端。
为了解决这个问题,W3C引入了cookie机制。cookie就好比一个身份证,客户端请求服务器的时候,服务器将这个身份证颁发给客户端,客户端(浏览器)将这个身份证保存在本地,当下次连接服务器时,客户端携带这个身份证请求服务器,服务器根据身份证即可确定用户身份。
cookie不仅客户端能访问到,因为客户端请求服务器的时候会将cookie放在请求头里带到服务器,所以服务器也能对cookie进行操作,这里讨论使用javascript在客户端对cookie进行操作的方法。

一、写入cookie

写入cookie主要设置五个字段,内容、有效期、域名、路径、是否安全传输。

内容

cookie是以键值对形式保存的,要新建一个名为name,值为zhangsan的cookie就是“name=zhangsan”,只需将这个cookie赋值给document.cookie即可:

document.cookie = "name=zhangsan";  //添加cookie

document.cookie有读和写两种形式,上面这个形式便是写形式,写形式代表添加cookie,且一次只能添加一条cookie,要添加多条则需要调用多次。如

document.cookie = "name=zhangsan;age=10"; //无效,只添加了name,忽略age
document.cookie = "age=10";  //添加age

有效期

默认情况下,cookie在关闭浏览器的时候就会被清除,想让cookie存放更长时间可以通过设置expires字段实现。
expires字段需要的值是GMT(格林威治时间)格式的日期型字符串,可以用Date对象得到:

var date = new Date();
//将时间设置成30分钟以后
date.setTime(date.getTime() + 30 * 60 * 1000);
//name=zhangsan将在30分钟后过期
document.cookie = "name=zhangsan;expires="+date.toGMTString();

想调整过期时间,只需要改动setTime一行的代码。

域名

处于安全性的考虑,cookie是具有不可跨域性的,用户访问百度的时候,百度为客户端颁发了一个cookie,用户再去访问谷歌,谷歌给客户端颁发一个cookie,那么百度和谷歌是不能访问到彼此的cookie的。
但是一般来说,我们访问baidu.com的时候会发现,你是可以访问到map.baidu.com的cookie的,这是因为给cookie设置了domian属性,因为map.baidu.com和baidu.com具有同样的域名baidu.com,所以可以为cookie设置domian值为baidu.com

document.cookie = "name=zhangsan;domain=baidu.com";

路径

同样道理,blog.csdn.net是访问不到blog.csdn.net/sunhengzhe里面的cookie的(但反过来可以),为了使上级目录访问到下级目录,在blog.csdn.net/sunhengzhe里新建cookie时,可以为cookie设置path属性,一般可以直接将其设置为根目录

document.cookie = "name=zhangsan;path=/";

安全传输

cookie是保存在客户端本地的,所以查看cookie是很方便,这也暴露了cookie的不安全性,所以一般cookie不存放如密码等重要信息,secure属性并不是用来设置cookie内容的安全性的,而是用于传输过程中的安全,设置secure后,只保证 cookie 与服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。所以如果是想让本地保存的cookie也加密的话,最好在保存cookie值的时候就保存加密后的数据。

document.cookie = "name=zhangsan;secure";

二、读取cookie

读取cookie使用到document.cookie的读模式,返回的就是所有的cookie,中间用分号隔开。

document.cookie = "name=zhangsan";  //写
document.cookie = "age=10";  //写
console.log(document.cookie);  //输出 name=zhangsan; age=10

三、删除、修改cookie

cookie并不提供删除、修改的方法,如果想修改某项cookie,只需添加一个同名cookie,新的值将覆盖旧的值。

document.cookie = "name=zhangsan";
document.cookie = "name=lisi";  //name被修改为lisi

要删除cookie,只需将该cookie有效期设置到当前时间以前即可。

var date = new Date();
//设置为前一毫秒(多前都可以)
date.setTime(date.getTime() - 1);
//删除name
document.cookie = "name=lisi;expires=" + date.toGMTString();

四、封装操作cookie的方法

使用原生方法对cookie操作是有些麻烦的,我们可以将其封装起来,name代表键名,value代表值,不填则为读取名为name的值,option代表设置值如有效期等。其中有效期单位为天。

function cookie(name, value, options) {if (typeof value != 'undefined') {options = options || {};//如果值为null, 删除cookieif (value === null) {value = '';options = {expires: -1};}//设置有效期var expires = '';if (options.expires && (typeof options.expires == 'number' || options.expires.toGMTString)) {var date;if (typeof options.expires == 'number') {date = new Date();date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));} else {date = options.expires;}expires = ';expires=' + date.toGMTString();}var path = options.path ? ';path=' + (options.path) : '';var domain = options.domain ? ';domain=' + (options.domain) : '';var secure = options.secure ? ';secure' : '';//设置cookiedocument.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');} else {//读取cookieif (document.cookie.length > 0) {var start = document.cookie.indexOf(name + "=")if (start != -1) {start = start + name.length + 1;var end = document.cookie.indexOf(";", start);if (end == -1){end = document.cookie.length;}return decodeURIComponent(document.cookie.substring(start, end));}}return ""}
}cookie("name", "zhangsan"); //添加name=zhangsan
cookie("name", null); // 删除name
cookie("age", "10", {expires: 30
}); // 添加age=10且有效期30天

javascript中的cookie问题相关推荐

  1. 在JavaScript中操作Cookie

    在Windows系统中,cookie通常是被储存在C:\Documents and settings\用户名\cookie目录下(如果系统在C盘).其实每个cookie实际上就是一个文本文件,里面是用 ...

  2. Javascript中操作cookie

    $.cookie = {/** * 读取cookie * * @param {String} n=名称 * @return {String} cookie值 * @example * $.cookie ...

  3. javascript中sessionStorage 、localStorage 和 Cookie

    javascript中sessionStorage .localStorage 和 Cookie 欢迎访问我的博客,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~ 参考文章:JS 详解 Cookie. ...

  4. html页面怎么删除cookie,javascript中怎么删除cookie?

    当web服务器向浏览器发送网页后,连接被关闭,服务器会忘记用户的一切.Cookie是为了解决"如何记住用户信息"而发明的.有时为了我们的信息安全需要删除Cookie,我们该如何做呢 ...

  5. JavaScript中的字符串操作(转)

    http://www.cnblogs.com/xuebin/articles/1296837.html 最近编一个javascript的翻译程序,发现无法正确比较两个字符串的相等,上网查了查,发现这篇 ...

  6. JavaScript中的load事件的作用_史上最全的web前端面试题汇总及答案JavaScript之二(二)...

    作者:樱桃小丸子儿 链接:https://www.jianshu.com/p/abadcc84e2a4 JavaScript JS的基本数据类型 number,string,boolean,objec ...

  7. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  8. JavaScript中window.open用法实例详解

    本文较为详细的分析了JavaScript中window.open用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <script LANGUAGE="javascript& ...

  9. JavaScript之document.cookie

    设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="userId=828"; 如果 ...

最新文章

  1. jmeter笔记(8)--关联
  2. Nature Plants:河南大学王学路团队揭示大豆与根瘤菌匹配性的进化及其分子机制...
  3. 基于机器学习的web异常检测
  4. cocos2d-x游戏开发(一)开始菜单
  5. ASP.NET MVC + ADO.NET EF 项目实战(二):设计过程与设计工具
  6. linux定时监控端口并重新启动shell脚本命令
  7. tcpdump捕获流量,并切分多个文件保存
  8. 你给客户报完价,客户就没消息了,什么原因呢?
  9. [20150705]从AWR抽取有问题的sql语句.txt
  10. 中国口岸年鉴(2001-2015年)
  11. DES算法理解--附《密码编码学与网络安全(第七版)》课后练习题答案
  12. IIS部署,发布网站
  13. 基础知识(一)WPF与 Blend的关系,以及Blend如何快速生成xaml代码,即Path数据。
  14. Linux zip与unzip:通过正则式解压压缩包内指定的文件
  15. echarts中国地图(百度地图)
  16. [转帖]国产麒麟系统为何饱受争议?
  17. MATLAB-矩阵的输入
  18. linux开机自动执行命令
  19. iOS触动精灵模拟触控类外挂原理分析
  20. 受邀出席线性资本投资者会议,闪马智能CEO彭垚分享AI赋能城市应用

热门文章

  1. 私服采集,在线添加系统!
  2. 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)
  3. 为什么要远程连接Linux
  4. keil4如何将c语言转换成汇编语言_Keil 中关于C语言编译生成汇编代码函数名规则...
  5. 安装centos7步骤_Centos7下源码编译安装mysql5.7 详细步骤 小白也能安装
  6. 高德地图画带箭头的线_模具装配图画成这样,那才真的叫标准!
  7. oracle进入rman报错,Oracle学习系列之Rman学习(三)
  8. java垃圾收集器zgc_java虚拟机ZGC垃圾收集器的实现方法
  9. 绝对干货!纯用HTML+CSS+JS 编写的计算器应用
  10. c语言中逗号是什么字符,C语言中的逗号操作符