概述

虽说在现代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. 染色dp(确定一行就可行)

    题:https://codeforces.com/contest/1027/problem/E 题意:给定n*n的方格,可以染黑白,要求相邻俩行”完全“不同或完全相同,对于列也是一样.然后限制不能拥有 ...

  2. curl查看请求你响应时间

    [root@localhost ~]# curl -o /dev/null -s -w time_namelookup:%{time_namelookup}"\n"time_con ...

  3. 对数据集进行最优分箱和WOE转换

    对数据集分箱的方式三种,等宽等频最优,下面介绍对数据集进行最优分箱,分箱的其他介绍可以查看其他的博文,具体在这就不细说了: 大体步骤: 加载数据: 遍历所有的feature, 分别处理离散和连续特征: ...

  4. 复杂的Polygon

  5. Python常用的数据结构详解

    数据结构:通俗点说,就是储存大量数据的容器.这里主要介绍Python的4种基本数据结构:列表.字典.元组.集合. 格式如下: 列表:list = [val1,val2,val3,val4],用中括号: ...

  6. Linux_更改主机名

    老师上linux课截图必须改主机名字,每个人一个代号,所以就写篇这个咯 查看主机名 [root@localhost.localdomain Desktop]# hostname localhost.l ...

  7. Qt QString类及常用函数功能详解

    QString 是 Qt 编程中常用的类,除了用作数字量的输入输出之外,QString 还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能. QString 存储字符串釆用的是 Un ...

  8. VisionPro连接Dalsa线扫相机

    1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...

  9. nodejs 模块变量 应用

    exports.allcodeandname=(function(){ var fs = require('fs'); var data = fs.readFileSync(__dirname+'/a ...

  10. iOS应用程序开发——解决iOS7之前版本与之后版本下app启动图片跳动问题

    之前开发的app都是针对iOS6(兼容iOS5),所以在开发之初也出现了启动图片向下跳动的现象,通过网上的解决方法,代码中做了处理(“-20”): _imageView.frame = CGRectM ...