程序员过关斩将--cookie和session的关系其实很简单
喜欢就点关注吧!
月高风下,下班路上....
菜菜哥,告诉你一个秘密,但是不允许告诉任何人
这么秘密,你有男票了?~
不是,昨天我偷偷去面试了,结果挂了
这不是好事吗,上天让公司留住你.....
好吧,不过还是要请教你一个问题,cookie和session有什么相同和不同吗?
这个可能要讲很长时间
定义
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。
很简短的两段定义,但是已经道出了cookie和session本质的区别,一个位于客户端,一个位于服务端。这个特性带着浓重的色彩,实际中的应用都离不开这个定义。
存储
这里针对浏览器中的cookie来讨论,不要做过多遐想
如果抛开其他特性来说,cookie本质上是浏览器(http请求)提供的一种客户端存储的数据,但是这个存储数据有自己的一些特性,比如:cookie长度的限制,跨域的限制(当然可以在服务端配合的情况下的突破这种限制)等。就像所有的存储一样,cookie也可以保存在内存中,也可以保存在磁盘中,只不过保存在磁盘的时候是在浏览器的存储目录下,毕竟cookie是基于http的,http请求又基于浏览器。
session在很多情况下被称为会话,本质上是一种服务端的存储数据。诞生的主要原因是为了解决http无状态这种特性。既然是数据,其实就可以存储于任何介质中,像实际应用中,有存储于内存中的,也有存储于redis的。所以只要看透了它的本质,存储在哪里可能就只是一个驱动的问题了。其实完全可以自己写一个程序把session的数据存储在txt中,只不过性能上可能需要多加考虑。
有联系吗
cookie
当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:
1. 客户端发送一个请求到服务器 --》
2. 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》
3. 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》
4. 服务器返回响应数据
set-cookie: session=4a0b9b1cce73c469b8a6b6a8aec294d5; domain=.xx.com; path=/; expires=Sun, 25 Aug 2019 08:21:27 -0000; secure; HttpOnly
以上过程很明显是一个最常见的场景,cookie的特性以及值是由服务端来下发,但是不要忘记cookie本质上是一种客户端技术,所以客户端其实同样能操作cookie,比如:登录的时候服务端的返回结果中可以不包含set-cookie的头部,而是把值通过正文来返回,客户端脚本通过读取返回的正文解析出结果,然后写入cookie同样能达到相同的效果。set-cookie只不过是http协议中已经约定好的格式,服务端告诉客户端需要设置cookie的协议而已。当然cookie还有其他很多特性(可能随着发展有所增加或者减少):
属性 | 介绍 |
---|---|
name | name字段为一个cookie的名称 |
value | value字段为一个cookie的值 |
domain | 可以访问此cookie的域名 |
path | 可以访问此cookie的页面路径 |
expires/Max-Age | 此cookie超时时间。 |
Size | Size字段 此cookie大小 |
http | cookie的httponly属性 |
secure | 设置是否只能通过https来传递此条cookie |
由于浏览器的安全策略,不同域名(何为不同域名,请百度)的cookie是不允许的,但是可以通过服务端的配置可以解决这个问题。
session
session的创建目的初衷就是为了让服务端记住会话,简而言之就是让服务端能识别出来是哪个客户端,既然要记住,那服务端必须要存储每个会话的数据,比如:实际项目中最常用的用户信息等。服务端存储这些用户数据没问题,最大的一个障碍是怎么样识别诸多请求中哪些是同一个会话。要解决这个问题,只依靠服务端无法解决,必须需要客户端来配合:需要上传会话的标识。
客户端上传会话的标识,必须是客户端和服务端都能支持的协议和数据,其实也可以看做是http请求支持的协议和数据,既然是基于http请求,最方便的就是利用cookie,cookie是一种key-value的数据存储格式,value的值正适合作为session的标识(session也是一种key-value的存储),在这种情况下cookie终于和session有了一定的联系。
session机制利用cookie来作为标识的传输机制,并不意味着只能用cookie,只要是服务端和客户端约定好了位置,session标识我可以放到http请求的任何位置(当然http请求必须得支持传输才可以)。你完全可以把session的标识放到http头Authorization字段,只要服务端能正确的读到此值并且正确解析即可。
有些面试官喜欢问cookie和session的相同和不同,甚至他们的联系,这样的提问在某种程度上是不太好的,容易让人错误的认为cookie和session的联系很密切,但是其实他们的联系很单纯,纯洁的朋友利用关系。
此文篇幅属于5分钟系列,更能有效利用碎片化时间,下一篇,我们也许可以讨论一下基于cookie和session的认证
完
●程序员修神之路--用NOSql给高并发系统加速
●程序员修神之路--高并发系统设计负载均衡架构
●程序员修神之路--做好分库分表其实很难之一(继续送书)
●程序员修神之路--做好分库分表其实很难之二(送书继续)
●程序员过关斩将--你为什么还在用存储过程?
●程序员过关斩将--小小的分页引发的加班血案
●程序员修神之路--问世间异步为何物?
●程序员修神之路--提高网站的吞吐量?
●程序员修神之路--?分布式高并发下Actor模型如此优秀?
●程序员过关斩将--你的面向接口编程一定对吗?
●程序员修神之路--高并发下为什么更喜欢进程内缓存
程序员过关斩将--cookie和session的关系其实很简单相关推荐
- 程序员过关斩将--解决分布式session问题
微信搜一搜 架构师修行之路 session 说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过.session 这个词,其实是一个抽象的概念,它不像 Cookie 那样有着明确的定 ...
- 程序员过关斩将--互联网人必备知识cookie和session认证
菜菜,上次你说的cookie和session的文章,我觉得不太具体 那你想怎么样具体呢? 我自己从网上查了一下,很多关于cookie和session认证的,能不能给我讲讲 用户认证呀,可以呀 这样我下 ...
- 程序员过关斩将--应对高并发系统有没有通用的解决方案呢?
" 灵魂拷问: 应对高并发系统有没有一些通用的解决方案呢? 这些方案解决了什么问题呢? 这些方案有那些优势和劣势呢? 对性能孜孜不倦的追求是互联网技术不断发展的根本驱动力,从最初的大型机到现 ...
- 程序员过关斩将--Http请求中如何保持状态?
微信搜一搜 架构师修行之路 这是一个被无数程序员撸过的问题,却只有少数人了解了真相.大体上搜了一下,网上关于http协议保持状态误导大家的文章还是有的,比如:有人说利用ViewState,那是asp. ...
- 程序员过关斩将--作为一个架构师,我是不是应该有很多职责?
点击上方"蓝字"关注我们领取架构书籍 每一个程序员都有一个架构梦. 上面其实本质上是一句富有事实哲理的废话,要不然也不会有这么多人关注你的公众号.这些年随着"企业数字化& ...
- 程序员过关斩将--为微服务撸一个简约而不简单的配置中心
点击上方蓝字 关注我们 毫不犹豫的说,现代高速发展的互联网造就了一批又一批的网络红人,这一批批网红又极大的催生了特定平台的一大波流量,但是留给了程序员却是一地鸡毛,无论是运维还是开发,每天都会担心服 ...
- 程序员过关斩将-- 工作好多年可能还未真正了解接口和抽象类
点击上方"蓝字"关注我们 菜菜哥,我偷偷出去面试了,然后面试官让我回来等消息 那你可能挂了呀,有什么问题没回答上来吗 确实有一个问题回答的不太好哎,就是接口和抽象类 这个确实是面试 ...
- 程序员过关斩将-- 喷一喷坑爹的面向UI编程
点击上方"蓝字"关注我们 菜菜哥,求你个事呗? 说来听听,假装你男朋友可不干 不是哦,是正经事.前几天一个项目UI改了,好多人跟着加班修改,怎么样尽量避免这种情况呢? UI修改顶多 ...
- 程序员过关斩将--从每秒6000写请求谈起
点击上方"蓝字"关注我们 菜菜哥,紧急求助呀 怎么回事?产品经理砍你了? 没有,只是写了个新项目,上线就被压垮了 什么功能,这么强悍? 一个记录用户观看视频进度信息的功能 那如果用 ...
最新文章
- 【组队学习】【24期】Datawhale组队学习内容介绍
- 利用getchar()消除多余字符数据(主要是“回车”)
- GNU make manual 翻译( 一百八十三)
- matlab讨论资金积累,资金积累、国民收入与人口增长的关系综合评估
- pat 乙级 1016 部分A+B(C++)
- phoneGap2.9+eclipse开发环境和helloword案例
- 修改Tomcat8 内存
- 国外网站视频下载方法通通告诉你
- 第5节 vs中新建文件/筛选器/文件夹
- 题目0121-机器人走迷宫
- 主动式PFC与被动式FPC浅析
- 使用frp端口映射实现内网穿透(SSH、HTTP服务)
- 大数据开发 - Java入门2
- 解决el-table固定列在ios系统出现的问题
- 消息中间件----内存数据库 Redis7(第3章 Redis 命令)
- Linux文件系统:minix文件系统二进制分析3(硬链接与软链接)
- ABAQUS中Cohesive粘聚力模型的2种定义方式(附案例操作步骤)
- 台式电脑主板插线步骤图_台式电脑插线步骤图(台式电脑电源插线步骤图)
- 数字化转型导师坚鹏:银行如何建设行业领先的人才培训管理体系
- 龙城战魂--ios技术支持