从实践的角度理解cookie的几个属性
cookie的处理流程大致分为以下几步:
1、浏览器初次请求服务器。
2、服务器认为有必要设置cookie,通过响应报文首部:Set-Cookie告知浏览器,cookie的内容。

3、浏览器本地保存(保存在浏览器运行内存或者硬盘文件中)。
4、浏览器之后每次请求同一个服务器,将cookie发送到服务器,通过请求报文首部:Cookie告知服务器cookie的内容(严格的将,此处其实会受到cookie生存期、path、Secure属性的影响,并不是每次都发往服务器)

cookie中常用到的几个属性(其用途这里不详述):
1、path
2、Expire和Max-Age
3、HttpOnly(不允许document.cookie脚本修改客户端的cookie)
4、Secure(其值为布尔类型:true或者false,默认为false)
前提:
通过node搭建本地http服务器,监听在本地44444端口。
一、对于path和Max-Age
var http = require('http');
const PORT = 44444,
MAXAGE= 60;
var start_time = 0,
end_time = 0;
var router = function (req,res) {
// body...
if (req.url != '/favicon.ico') {
var curr_time = (new Date).getTime();
console.log(curr_time);
if (req.url == '/home') {
start_time = curr_time;
end_time = start_time+MAXAGE*1000;
console.log(end_time);
res.setHeader("Set-Cookie", [`name=qcer;id=1;color=red;path=/qcer;domain=localhost;Max-Age=${MAXAGE}`]);
}
var content = `${req.url}-----
cookie的生效时间:${start_time}-----cookie失效时间:${end_time}
当前时间:${curr_time}
${req.headers.cookie}`
res.end(content);
}
};
var server = http.createServer(router);
// body...
server.listen(PORT,function () {
// body...
console.log(`the http server is listening on port ${PORT}`);
});
代码中设置了Max-Age值为60,Max-Age默认以秒为单位,path的值为/qcer,则cookie只对http://localhost:44444/qcer该地址有效。
1)本地访问地址http://localhost:44444/home,服务器通过响应报文告知浏览器正确设置cookie。

如果此时访问http://localhost:44444/qcer之外的任何地址,请求报文都不会将本地cookie发往服务器,即使cookie尚未失效,原因在于受到path的限制。
2)访问http://localhost:44444/qcer
如果cookie未失效,在服务端能够收到浏览器发送的cookie,同在也能在请求报文中看到首部Cookie。
即使关闭浏览器,再重新打开访问,cookie也不会因此而丢失,因为此时cookie不是保存在浏览器运行时内存中的,而是保存在硬盘文件中。即此时的cookie表现为持久cookie而非会话cookie(会话cookie在关闭浏览器之后cookie就不存在了)。

如果cookie已经失效,即使访问http://localhost:44444/qcer,浏览器也不会将cookie发往服务器,因为cookie在客户端已经不存在。服务端当然也不会收到cookie信息。

也可以通过浏览器的其它方式查看到Max-Age的效果:

二、对于Secure
浏览器表现为有Secure属性的cookie只针对https的请求有效,而针对http的请求无效。也即,即使服务器的响应报文中有首部Set-Cookie,但是设置有属性Secure=true,同时浏览器发现是在http请求的情况下,浏览器根本不会生成cookie信息。浏览器会忽略掉响应报文的Set-Cookie首部。

访问地址http://localhost:44444/qcer,浏览器请求报文和服务端当然也没有cookie。

三、对于Expires属性
Expires与Max-Age不同之处在于:
Expires是一个未来的时间点概念,表示在未了某个时刻之后,cookie就会过期。
Max-Age是一个事件段的概念,表示从现在开始,经过多长事件后,cookie会过期。
但是有Expires与Max-Age属性的cookie都是持久cookie,cookie信息会保存在硬盘文件中。否则这为会话cookie,随着浏览器的关闭而消失。
1)在生效期内的cookie:

2)失效的cookie

从实践的角度理解cookie的几个属性的更多相关文章
- IL角度理解C#中字段,属性与方法的区别
IL角度理解C#中字段,属性与方法的区别 1.字段,属性与方法的区别 字段的本质是变量,直接在类或者结构体中声明.类或者结构体中会有实例字段,静态字段等(静态字段可实现内存共享功能,比如数学上的pi就 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- 转:如何学习SQL(第二部分:从关系角度理解SQL)
转自:http://blog.163.com/mig3719@126/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我 ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...
- 基础知识《十二》一篇文章理解Cookie和Session
理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...
- 深入理解Cookie和Session机制
转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...
- C#基础知识之理解Cookie和Session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
随机推荐
- mac环境下安装mysql
一,下载mysql 官网"Community " 下会看到"MySQL Community Server"下方有一个"download"点击 ...
- 团队作业8----第二次项目冲刺(Beta阶段) 第二天
BETA阶段冲刺第二天 1.开了个小会议 2.每个人的工作 (1) 昨天已完成的工作: 昨天把学生的登录功能完善了并且优化了下界面 (2) 今天计划完成的工作: (3) 工作中遇到的困难: 1.团队还 ...
- 201521123082 《Java程序设计》第7周学习总结
201521123082 <Java程序设计>第7周学习总结 标签(空格分隔): Java 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ...
- C语言中变量的作用域和生命周期
变量的类型: 1. 局部变量和全局变量 局部变量也称为内部变量. 局部变量是在函数内作定义说明的.其作用域仅限于函数内, 离开该函数后再 使用这种变量是非法的. 全局变量也称为外部变量,它是在函数外部 ...
- 201521123061 《Java程序设计》第七周学习总结
201521123061 <Java程序设计>第七周学习总结 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 贴上源 ...
- Java课程设计 - 学生基本信息管理
团队名称.团队成员介绍(需要有照片) 团队名称:此艺兴非彼艺兴 团队成员: 王兴:女,积极上进 曾艺佳:女,积极上进 项目git地址 StudentManage项目 项目git提交记录截图(要体现出每 ...
- JAVA课程设计——单机版五子棋
JAVA课程设计--单机版五子棋 1.团队名称.团队成员介绍 团队名称:Gomoku小分队 团队成员: 网络1512 201521123038 游舒婷(组长) 网络1512 201521123043 ...
- 201521123050 《Java程序设计》第11周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还 ...
- 利用Struts拦截器限制上传图片的格式和大小
在这之前 Struts的一个核心功能就是大量的拦截器,既然是框架,那么自然也就贴心地为我们准备好了各种常用的功能,比如这里即将讨论的如何限制上传图片的格式和大小.那么既然是使用Struts已经写好的拦 ...
- geotrellis使用(三十四)矢量瓦片技术研究——矢栅一体化
前言 本文所涉及技术与Geotrellis并无太大关系,仅是矢量瓦片前端渲染和加载技术,但是其实我这是在为Geotrellis的矢量瓦片做铺垫.很多人可能会说,Geotrellis为什么要搞矢量瓦片, ...