HTTP Cookie

来源:互联网 发布:淘宝卖家手机端装修 编辑:程序博客网 时间:2024/05/26 07:28

前言
  因为转前端时间短,而且之前做的项目都没有相关需求,所以并没有接触到Cookie。(前面的理由都是扯淡,没看过没学过还很菜才是主要原因)。
  但最近有个项目需要对Cookie有些了解,所以只能上网自学补充了。然而用百度搜索出来的文章,基本都是长篇大论Cookie与Session的理论,而且大多都是重复的文章。并没有实际使用的详细讲解,所以只能自己摸索着来了。

1 什么是Cookie

  我们常说的Cookie,是保存在浏览器上的一块数据。我们知道浏览器是无法访问客户端设备存储的数据,而有时又需要存储一些数据供页面使用,此时就需要用到Cookie来保存这些数据。网上很多关于Cookie的文章,关于理论方面很多前辈都已写过,我就不献丑了,更多详细介绍可参考MDN-Cookie,这篇博客主要简单列出Cookie要点,以及详细的实际使用。

2 一些要点

  1. 浏览器的Cookie实际是存储在计算机硬盘上,win系统中Chrome的Cookie保存在C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default\Cookies文件中。
  2. 在浏览器中发起ajax请求时,无论使用jQuery还是原生XMLHttpRequest,无论是GET还是POST,浏览器都会自动携带Cookie并随请求一并发送至服务器,所以会增加一些额外的性能负担。
  3. 服务器向浏览器发送Cookie时,使用Set-Cookie响应头。
  4. 浏览器向服务器发送Cookie时,使用Cookie请求头。

3 使用Cookie开发

在浏览器中:
1. 在浏览器中通过document.cookie获取或设置Cookie
2. Cookie是一个键值对形式的格式化过的字符串,多个键值对通过分号隔开。

// 设置cookielet cookie = 'username=qq451354;sessid=abc;sex=man'document.cookie = cookie// 读取cookielet cookie = document.cookieconsole.log(cookie)    // 'username=qq451354;sessid=abc;sex=man'

cookie的其他属性

  • 以下可选的cookie属性值可跟在键值对后,用力具体化对cookie的设定/更新,使用分号作分隔。
    • ;path=path (e.g. ‘/’, ‘/mydir’) 如果没有定义,默认为当前文档位置的路径。
    • ;domain=domain (e.g. ‘example.com’, ‘.example.com’(包括所有子域名), ‘subdomain.example.com’) 如果没有定义,默认为当前文档位置的路径的域名部分。
    • ;max-age=max-age-in-seconds(e.g. 一年为60*60*24*365)
    • expires=data-in-GTMString-format (日期格式参见Date.toUTCString)如果没有定义,cookie会在会话结束时过期。
  • cookie的值字符串可以用encodeURIComponent()来保证它不包含任何都好、分号或者空格(cookie值中禁止使用这些值)

cookie读取/写入库
参考MDN - document.cookie

3.1 两种Cookie

会话期Cookie
1. 会话期Cookie即浏览器关闭后自动删除的Cookie。
2. 不指定过期时间(Expires)或有效期(Max-Age)的Cookie即为Cookie。

持久Cookie
1. 持久Cookie可指定一个过期时间(Expires)或有效期(Max-Age)。
2. 关闭浏览器对持久Cookie无影响,只根据设置的过期时间或有效期决定是否删除。