概述

虽说在现代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. 5)关于CSS和js静态文件引入路径

    (1)参考资料   thinkphp5手册      视图--->输出替换 (2)方法(1)在我们的application中,找到config.php,在里面输入这样的配置: <?php ...

  2. 47)PHP,数据库多表连接

    https://www.w3cschool.cn/mysql/56ik1sqv.html

  3. Seikimatsu Occult Tonneru(网络流,状态数(建不建边)不多时,可考虑直接进行枚举

    http://acm.hdu.edu.cn/showproblem.php?pid=4309 总结:边可存东西时,可新建一个点x连接u.v,x再连向汇点: #include<iostream&g ...

  4. django-crontab使用

    用 django-crontab 为 Django 添加定时任务 需求 做后台开发的时候,有时候会遇到这样的需求,在某个固定时间或者一定时间间隔自动触发某一事件.比如说我有一个需求要求是,周一到周五早 ...

  5. Centos-Apache服务(2)

    title date tags layout CentOS6.5 Apache的增值服务 2018-09-03 Centos6.5服务器搭建 post 1.更改Apache的监听端口号 [root@l ...

  6. 微弱信号二次谐波检测的FPGA的实现-总结

    首先还是把握大的系统框架: 我要实现的部分不包括DA以及AD的转换,主要是将SSP接收到的数据送入到FIFO中,然后经过FIR带通滤波器的处理后对该信号计算幅值并做PSD,然后处理的信号经过积分够一方 ...

  7. F5 BIG-IPLTM串联组网连接模式

  8. python使用geopandas和shapely处理shp文件

    一.环境搭建 所需库:geopandas (以及前置库)  doc:http://geopandas.org/ shapely(以及前置库)  doc: 二.数据预处理 1.将shp文件进行切片 2. ...

  9. 为什么jdk1.8 HashMap的容量一定要是2的n次幂

    一.jdk1.8中,对“HashMap的容量一定要是2的n次幂”做了严格控制 1.默认初始容量: [Java] 纯文本查看 复制代码 ? 1 2 3 4 /**  * The default init ...

  10. Nginx笔记:支持对用户提交URL和服务的URL不一致时,保持对POST提交的支持

    用户访问的URL和服务的URL不一致,需要对URL修改,同时使用的是POST提交方式 location ~* ^/portalproxy/([-]*)/portal$ { #rewrite '^/po ...