Cookie由来

HTTP协议是一个无状态的协议,服务器无法区分出两次请求是否发送自同一服务器。

需要通过会话控制来解决这个问题,会话控制主要有两种方式Cookie和Session。

Cookie是什么

Cookie就是一个头,Cookie由服务器创建,服务器以响应头的形式发送给客户端,

客户端收到Cookie以后,会将其自动保存,在下次向服务器发送请求时会自动将Cookie以请求的形式发出,

服务器收到以后就可以检查请求头中的Cookie并且可以根据Cookie中的信息来识别出不同的用户。

Cookie机制

1、客户端发送一个请求到服务器
2、服务器返回响应头到客户端,其中包含Set-Cookie的头部
3、客户端保存cookie,之后向服务器再次发送请求时,请求头中包含一个Cookie的字段
4、服务器检查请求头中的Cookie,根据Cookie中的信息来识别,返回对应用户的响应数据

简言之,

服务端通过 Set-Cookie 响应头来向客户端设置 Cookie。

客户端通过 Cookie 请求头向服务端发送之前存储的 Cookie 数据。

Cookie属性

属性 解释
name=value 键值对,设置要保存的 Key-Value
expires 过期时间,在设置的某个时间点后该 Cookie 就会失效。注:expires 时间要转成GMT形式,即 toGMTString();
domain 域名,指发出 HTTP 请求时,哪些域名要附带这个 Cookie。
path 路径,指该 Cookie 是在当前的哪个路径下生成的,如PATH属性是/,那么请求/docs路径也会包含该 Cookie。
secure

表示cookie发送到http或https请求。

值为0或1, 默认值为 0,cookei在http和https连接上都有效。 值为1,则cookie只在https连接上有效。

httponly

设置HttpOnly属性,那么通过js脚本将无法读取到cookie信息(仅出现在请求头),能有效的防止XSS攻击。

此时若想修改Cookie ,只能通过服务器端修改,即document.cookie

凡是httpOnly类型的cookie,其 HTTP 一列都会打上√

操作Cookie

具体操作:设置、读取、删除cookie

  1. 创建document.cookie=‘key=value; key1=value2’
  2. 读取var x = document.cookie
  3. 修改(进行覆盖)document.cookie=‘newkey=newvalue; newkey1=newvalue2’
  4. 删除(设置过期时间expires )document.cookie = "key=value’; expires=Thu, 01 Jan 1970 00:00:00 GMT";
function setCookie(name, value,days) {
var exp = new Date();
//setTime() 方法以毫秒设置,向 1970/01/01 添加毫秒,并显示新的日期和时间。
exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000);
//toGMTString格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。
document.cookie = name + "=" + value + ";expires=" + exp.toGMTString();
}

大白话理解cookie的更多相关文章

  1. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

  2. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  3. 形象地理解Cookie和Session

    Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...

  4. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  5. 基础知识《十二》一篇文章理解Cookie和Session

    理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...

  6. 深入理解Cookie和Session机制

    转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...

  7. 理解Cookie与Session

    HTTP本身是无状态的. 这符合HTTP协议设计的目的.客户端只是简单地向服务器请求某种资源.两者都没有必须记录彼此过去的行为,每一次请求之间都是独立的. 为了保存状态.在客户端使用Cookie,在S ...

  8. 理解cookie,session,token

    彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...

  9. [转帖]彻底理解cookie,session,token

    彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...

随机推荐

  1. python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影

    我们在之前的文章谈到了高效爬虫 在 python 中 多线程下的 GIL 锁会让多线程显得有点鸡肋 特别是在 CPU 密集型的代码下 多线程被 GIL 锁搞得效率不高 特别是对于多核的 CPU 来说 ...

  2. 《零压力学Python》 之 第一章知识点归纳

    第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...

  3. 编写who命令

    第一个版本: /* who1.c - a first version of the who program * open, read UTMP file, and show results. */ # ...

  4. ES6-babel转码

    关于BaBel转码 有人问我babel的功能以及执行的过程和配置,在网上查阅了大量的资料~收集到这些~有错请指出,及时修改. ------------------------------------- ...

  5. unigui的session【1】

    目前是1394. 明白session如何使用管理,看demo Session List和SessionTimeout unit Main; interface uses Windows, Messag ...

  6. [国家集训队2012]JZPFAR

    [国家集训队2012]JZPFAR 题目 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离( ...

  7. nyoj_111_分数加减法_201311281341

    分数加减法 时间限制:3000 ms  |           内存限制:65535 KB 难度:2   描述 编写一个C程序,实现两个分数的加减法   输入 输入包含多行数据 每行数据是一个字符串, ...

  8. 中缀表达式转逆波兰式(后缀表达式)求值 C++ Stack

    给一个包含小数的中缀表达式 求出它的值 首先转换为后缀表达式然后利用stack求出值 转换规则: 如果字符为'('  push else if 字符为 ')' 出栈运算符直到遇到‘(' else if ...

  9. 优化实例- not in 和 not exists

    客户运行一个SQL,非常慢.于是进行了一下改写.速度飞快,首先看一下原来的SQL. original sql SQL> explain plan for 2 select count(*) fr ...

  10. OpenCV使用GPU

    在使用OpenCV2.4.x的时候,以为不用重新编译可以直接使用GPU模块,不过在我使用的时候,发现使用getCudaEnabledDeviceCount()的时候,总是获得是0,于是重新编译Open ...