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的几个属性的更多相关文章

  1. IL角度理解C#中字段,属性与方法的区别

    IL角度理解C#中字段,属性与方法的区别 1.字段,属性与方法的区别 字段的本质是变量,直接在类或者结构体中声明.类或者结构体中会有实例字段,静态字段等(静态字段可实现内存共享功能,比如数学上的pi就 ...

  2. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  3. 转:如何学习SQL(第二部分:从关系角度理解SQL)

    转自:http://blog.163.com/mig3719@126/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我 ...

  4. 理解Cookie和Session机制

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

  5. 从tcp原理角度理解Broken pipe和Connection reset by peer的区别

    从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...

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

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

  7. 深入理解Cookie和Session机制

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

  8. C#基础知识之理解Cookie和Session机制

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  9. 转:理解Cookie和Session机制

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

随机推荐

  1. 03-TypeScript中的强类型

    在js中不能定义类型,而是根据赋值后,js运行时推断类型.在ts中支持强类型,强类型包括string.number(浮点型,不是整型).boolean.any(任意类型).Array<T> ...

  2. JS中event.keyCode用法及keyCode对…

    js中event.keyCode用法及keyCode对照表 标签: javascriptJavaScriptJavascriptjavaScript 2012-12-11 15:11 HTML Jav ...

  3. Java学习7——一些注意的地方

    (学习运算符.if和switch分支.for与while与do...while循环.break和continue.递归,内容和C++没差,挑了几个注意点) 运算符 逻辑与(&)和短路与(&am ...

  4. 201521123042 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 Q1.代码阅读:Child压缩包内源代码 1.1 com. ...

  5. 201521123059 《Java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 1.Comparable与Arrays.sort,其功能是对指定对象数组按升序进 ...

  6. 201521123063 《Java程序设计》 第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 1.1 建立数据库test.表students. ...

  7. Optional变量初学者指南

    苹果三周前发布了Swift. 从那时起,我一直在阅读Swift的官方指南,并在Xcode 6测试版中使用. 我开始喜欢Swift的简单和语法. 与我的团队一起,我仍然在研究新的语言,并看看它与Obje ...

  8. 过度拟合(overfilting)

    过拟合概念:是指分类器能够百分之百的正确分类样本数据(训练集中的样本数据),对训练集以外的数据却不能够正确分类. 原因:1:模型(算法)太过复杂,比如神经网络,算法太过精细复杂,规则太过严格,以至于任 ...

  9. 关于sql语句引发的404错误

    今天分享个小问题,也是今天在项目中遇到的,希望对遇到相关问题的朋友有所帮助. 使用工具:(相关的) mybatis,spring-mvc,mysql 问题原因: 我在mybatis的mapper文件中 ...

  10. C语言编译过程及数据类型

    写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...