概述

虽说在现代Web开发过程中讨论Cookie有些不合时宜,但是这是开发人员如今可以使用的最古老、最稳定的客户端存储形式。当然,我们并不推荐使用Cookie,只是说它是一种选择。

Cookie于1994年在Netscape浏览器的Beta版本中被引入。它通过随HTTP请求和响应一起发送的HTTP header值发挥作用。众所周知,每当浏览器请求一个资源,就会有一组header随请求一起发送。那些header包含各种类型的数据,其中包括有关浏览器的信息以及它需要的数据形式。反过来,服务器也会往回发送header。

Cookie使用HTTP header发送,具体来说是名为Cookie的HTTP header,由浏览器发送到服务器,又从服务器发送到浏览器。你会发现这里有个问题。如果使用客户端存储的一个好处是不用通过网络发送数据,那么来回发送Cookie不是反其道而行之吗?这也是上面提到的不建议使用Cookie的另一个原因。

默认情况下,浏览器没有限制可以拥有的Cookie数量。以前,每个域名最多只能有20个Cookie,但如今的浏览器似乎丢掉了这个限制。

Cookie对应唯一的域名。这意味着在foo.com上设置的Cookie值不能用于goo.com.这样很好,因为你不会希望其他网站影响你在自己的网站上使用Cookie。
Cookie也可以对应唯一的子域名。例如,app.foo.com是Foo网站的一个独立的子域名。你可以创建只有app.foo.com可以读取的Cookie,也可以创建www.foo.com和app.foo.com都可以读取的Cookie。
更复杂的做法是创建只对特定路径有效的Cookie。所以,你可能希望创建只有foo.com/app可见的Cookie。
最后,你可以创建只对网站的安全(HTTPS)版本有效的Cookie。显然,选用哪种方案取决于应用程序的用途,以及你认为哪里需要Cookie值。

除了设置Cookie出现的地方,还可以指定Cookie的有效时间。

  • 只在当前会话期间存在的Cookie(从根本上说是直到浏览器关闭)
  • 永远存在的Cookie
  • 存在特定时长的Cookie
  • 特定时间点之后失效的Cookie

使用方法

Cookie没有API。要使用Cookie,只需在代码中访问document.cookie对象。例如,可以像下面一样创建一个Cookie.

document.cookie = "name=zuckjet"

Cookie值必须符合URL编码规则,这意味着如果想动态定义Cookie,那么就需要使用类似encodeURIComponent的辅助函数。
下面这段代码世家还是那个创建了两个Cookie,而不是一个。

document.cookie = "name=zuckberg";
document.cookie = "age=18";

在Cookie值后面使用一个分号可以追加元数据:

documen.cookie = "name=zuckjet;expires=xxx;domain=xxx"

当我们不指定元数据时,Cookie默认只对当前域名的当前路径有效,有效期是当前会话。

读取Cookie

读取Cookie多少简单一些--这取决于你对字符串的解析程度。没有API可以用来获取一个Cookie。不过,你只需要简单地读取document.cookie就可以了。这样你可以获取特定网站的Cookie。比如,segmentfault的cookie值如下:

读取一个Cookie就意味着将字符串解析成多个有分号分隔的部分。另外还要注意,你无法访问任何元数据。通过document.cookie值无法获取这类信息。

删除Cookie

要删除Cookie,只需要将其过期时间设置成过去的时间即可。从技术上讲,这个时间值无关紧要,但名称必须与你想要删除的Cookie名称一致。

使用cookie的更多相关文章

  1. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

  2. IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

    你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...

  3. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. 一个诡异的COOKIE问题

    今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...

  6. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  7. jquery.cookie的使用

    今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...

  8. 跨域问题,前端主动向后台发送cookie

    跨域是什么? 从一个域名的网页访问另一个域名的资源,就会出现跨域.只要协议.端口.域名有一个不同就会出现跨域 例如: 1.协议不同  http://www.baidu.com:80 和 https:/ ...

  9. 【流量劫持】沉默中的狂怒 —— Cookie 大喷发

    精简版:http://www.cnblogs.com/index-html/p/mitm-cookie-crack.html 前言 上一篇文章 讲解了如何借助前端技术,打造一个比 SSLStrip 更 ...

  10. 好好了解一下Cookie

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

随机推荐

  1. 基础篇六:Nginx编译配置参数

  2. [LC] 452. Minimum Number of Arrows to Burst Balloons

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  3. Linux下实现与Internet时间同步

    一.Linux下实现与Internet时间同步 1.安装ntp [root@server-2 ~]# yum install -y ntpdate 2.同步时间 // 方式一.使用域名连接,要经过DN ...

  4. python3下scrapy爬虫(第十三卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之配置)

    之前我们的爬虫都是单机爬取,也是单机维护REQUEST队列, 看一下单机的流程图: 一台主机控制一个队列,现在我要把它放在多机执行,会产生一个事情就是做重复的爬取,毫无意义,所以分布式爬虫的第一个难点 ...

  5. android五子棋游戏、资讯阅读、大学课程表、地图拖拽检测、小说搜索阅读app等源码

    Android精选源码 Android 自动生成添加控件 android旋转动画.圆形进度条组合效果源码 一款很强的手机五子棋app源码 android地图拖拽区域检测效果源码 实现Android大学 ...

  6. OpenCV 为程序界面添加滑动条

    #include <cv.h> #include <highgui.h> using namespace cv; /// 全局变量的声明与初始化 ; int alpha_sli ...

  7. 基于phathomjs token 不定时无响应问题排查

    问题描述 基于phathomjs的token池项目,基本原理是,打开淘宝页,获取匿名cookie,再由cookie中提取有效token,调用方通过该token获取淘宝数据 为方便基他人应用,封装了部分 ...

  8. getline的使用

    函数定义: getline(istream &in, string &s) 作用: 在C++中用 string 类型进行终端输入字符串时,解决无法输入带有空格的字符串的问题. 功能: ...

  9. verilog求倒数-ROM实现方法

    采用线性逼近法结合32段线性查找表的方式来实现1/z的计算. 首先将1/32-1/64的定点化数据存放到ROM中,ROM中存放的是扩大了2^20 次方的数字四舍五入后的整数部分.n值越大,精度越大,误 ...

  10. PLL到底是个啥么东西呢?

    ——————————————————更新于20180826———————————————————————————— PLL:完成两个电信号的相位同步的自闭环控制系统叫锁相环.用电压控制延时,用到了VC ...