Cookie

目录

1、cookie 是个啥?

2、cookie 的优缺点

3、写入 cookie 信息

4、读取 cookie 信息

5、修改和删除 cookie 信息


1、cookie 是个啥?

cookie 是保存在客户端系统中的一个文本文件,每个 cookie 文本文件都与指定 Web 服务器的域中的固定目录相关联。当浏览器向服务器请求该目录下的页面时,关联的 cookie 信息就会随着 HTTP 请求以头部信息的方法是送给服务器。Cookie 文档

HTTP 协议本身是无状态的。无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据,这样一来,当浏览器第一次向服务器发送请求时,服务器无法判断用户的身份,但是在后续的会话中又需要跟踪用户状态,这个时候 cookie 就派上用场了。

cookie 实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个 cookie 。客户端浏览器会把 cookie 保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该 cookie 一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。

2、cookie 的优缺点

在客户端,用户可以使用 JavaScript 读写 cookie 信息,服务器端脚本也能够编辑这些 cookie 信息。

cookie 的优点主要表现在:简单易用、浏览器负责发送数据、浏览器自动管理不同站点的 cookie。

cookie 的先天的不足具体说明如下:

使用简单的文本文件存储数据,安全性很差,容易被黑客窃取
cookie中存储的数据容量有限,其上限为4KB
存储cookie的数量有限,多数浏览器的上限是30-50个
如果浏览器的安全配置为最高级别,则cookie会失效
cookie不适合大量数据的存储,因为cookie会由每个服务器的请求来传递,从而造成cookie速度缓慢、效率低下

3、写入 cookie 信息

cookie 字符串时同一组名值对,名称和值之间以等号相连,名值对之间使用分号进行分割。值中不能够包含分号、逗号和空白符。如果包含特殊字符,必须使用 escape() 函数对其进行编码,在读取 cookie 时也必须使用 unescape() 函数进行解码。使用 document.cookie 可以读写 cookie 字符串信息。下面例子演示如何使用 cookie 存储 cookie 信息。

var d = new Date();         //实例化当前日期对象
d = d.toString();           //将当前日期对象的实例转化成字符串
d = "date=" + escape(d);    //设置cookie字符串
document.cookie = d;        //写入cookie信息

在默认状态下,cookie 信息只能在当前会话期(当前浏览器窗口)中有效并存在,一旦结束会话(关闭浏览器窗口),这些 cookie 信息就会被自动删除。如果需要长久保存 cookie 信息,可以设置 expires 属性,把字符串 "expires=data" 附加到 cookie 字符串后面。比如创建一个有效期为一个月的 cookie 信息:

var d = new Date();              //实例化当前日期对象
d.setMonth(d.getMonth() + 1);    //提取月份值并加1,然后重新设置当前日期对象
d = "date=" + escape(d) + ";expires=" + d.toGMTString();    //设置cookie字符串,并在尾部加上expires名值对
//expires使用格式:name = value; expires = date    date为格林威治事件(GMT)格式:SUN,30 Apr 2019 00:00:00 UTC
document.cookie = d;        //写入cookie信息

cookie 信息具有域和路径的限制。在默认情况下,仅在当前页面路径内有效。例如,在页面 http://www.mysite.cn/bbs/index.html 中写入信息 cookie 信息,那么这个 cookie 只会在 http://www.mysite.cn/bbs/ 路径下可见,其他域或本域其他目录下的文件是无权访问的。这种限制主要为了保护 cookie 信息安全,避免恶意读写。用户可以使用 cookie 的 path 和 domain 属性重设可见路径和作用域。其中 path 属性包含了与 cookie 信息相关联的有效路径,domain 属性定义了 cookie 信息的有效作用域,用法如下:

name=value;expires=date;domain=domain;path=path;
//如果设置path=/,可以设置cookie信息与服务器根目录及其子目录相关联,从而实现在整个网站中共享 cookie信息
//如果指向让bbs目录下的网页访问,可以设置path=/bbs即可。

注意:不推荐前端操作 cookie!别问!

4、读取 cookie 信息

访问 document.cookie 可以读取 cookie 信息,cookie 属性值是一个由零个或多个名值对的子字符串组成的字符串序列,每个名值对之间通过分号进行分割。如果在写入 cookie 信息时,使用了 escape() 方法编码 cookie 值,则应该在读取时不要忘记使用 unescape() 方法解码 cookie 值。

5、修改和删除 cookie 信息

如果需要改变指定 cookie 值,只需要使用相同名称和新值重新设置该 cookie 值即可。如果要删除某个 cookie 信息,只需要为该 cookie 设置一个已过期的 expires 属性值。


Web 应用的快速发展,在客户端直接存储用户数据变得越来越重要。最简单、宜行的方法是 cookie,但是 cookie 存在很多缺陷。HTML5 提出了很多解决方案:Web StorageWeb Database 等,点击了解更多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值