喜欢就点关注吧!

月高风下,下班路上....

菜菜哥,告诉你一个秘密,但是不允许告诉任何人

这么秘密,你有男票了?~

不是,昨天我偷偷去面试了,结果挂了

这不是好事吗,上天让公司留住你.....

好吧,不过还是要请教你一个问题,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的关系其实很简单相关推荐

  1. 程序员过关斩将--解决分布式session问题

    微信搜一搜 架构师修行之路 session 说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过.session 这个词,其实是一个抽象的概念,它不像 Cookie 那样有着明确的定 ...

  2. 程序员过关斩将--互联网人必备知识cookie和session认证

    菜菜,上次你说的cookie和session的文章,我觉得不太具体 那你想怎么样具体呢? 我自己从网上查了一下,很多关于cookie和session认证的,能不能给我讲讲 用户认证呀,可以呀 这样我下 ...

  3. 程序员过关斩将--应对高并发系统有没有通用的解决方案呢?

    " 灵魂拷问: 应对高并发系统有没有一些通用的解决方案呢? 这些方案解决了什么问题呢? 这些方案有那些优势和劣势呢? 对性能孜孜不倦的追求是互联网技术不断发展的根本驱动力,从最初的大型机到现 ...

  4. 程序员过关斩将--Http请求中如何保持状态?

    微信搜一搜 架构师修行之路 这是一个被无数程序员撸过的问题,却只有少数人了解了真相.大体上搜了一下,网上关于http协议保持状态误导大家的文章还是有的,比如:有人说利用ViewState,那是asp. ...

  5. 程序员过关斩将--作为一个架构师,我是不是应该有很多职责?

    点击上方"蓝字"关注我们领取架构书籍 每一个程序员都有一个架构梦. 上面其实本质上是一句富有事实哲理的废话,要不然也不会有这么多人关注你的公众号.这些年随着"企业数字化& ...

  6. 程序员过关斩将--为微服务撸一个简约而不简单的配置中心

    点击上方蓝字  关注我们 毫不犹豫的说,现代高速发展的互联网造就了一批又一批的网络红人,这一批批网红又极大的催生了特定平台的一大波流量,但是留给了程序员却是一地鸡毛,无论是运维还是开发,每天都会担心服 ...

  7. 程序员过关斩将-- 工作好多年可能还未真正了解接口和抽象类

    点击上方"蓝字"关注我们 菜菜哥,我偷偷出去面试了,然后面试官让我回来等消息 那你可能挂了呀,有什么问题没回答上来吗 确实有一个问题回答的不太好哎,就是接口和抽象类 这个确实是面试 ...

  8. 程序员过关斩将-- 喷一喷坑爹的面向UI编程

    点击上方"蓝字"关注我们 菜菜哥,求你个事呗? 说来听听,假装你男朋友可不干 不是哦,是正经事.前几天一个项目UI改了,好多人跟着加班修改,怎么样尽量避免这种情况呢? UI修改顶多 ...

  9. 程序员过关斩将--从每秒6000写请求谈起

    点击上方"蓝字"关注我们 菜菜哥,紧急求助呀 怎么回事?产品经理砍你了? 没有,只是写了个新项目,上线就被压垮了 什么功能,这么强悍? 一个记录用户观看视频进度信息的功能 那如果用 ...

最新文章

  1. 【组队学习】【24期】Datawhale组队学习内容介绍
  2. 利用getchar()消除多余字符数据(主要是“回车”)
  3. GNU make manual 翻译( 一百八十三)
  4. matlab讨论资金积累,资金积累、国民收入与人口增长的关系综合评估
  5. pat 乙级 1016 部分A+B(C++)
  6. phoneGap2.9+eclipse开发环境和helloword案例
  7. 修改Tomcat8 内存
  8. 国外网站视频下载方法通通告诉你
  9. 第5节 vs中新建文件/筛选器/文件夹
  10. 题目0121-机器人走迷宫
  11. 主动式PFC与被动式FPC浅析
  12. 使用frp端口映射实现内网穿透(SSH、HTTP服务)
  13. 大数据开发 - Java入门2
  14. 解决el-table固定列在ios系统出现的问题
  15. 消息中间件----内存数据库 Redis7(第3章 Redis 命令)
  16. Linux文件系统:minix文件系统二进制分析3(硬链接与软链接)
  17. ABAQUS中Cohesive粘聚力模型的2种定义方式(附案例操作步骤)
  18. 台式电脑主板插线步骤图_台式电脑插线步骤图(台式电脑电源插线步骤图)
  19. 数字化转型导师坚鹏:银行如何建设行业领先的人才培训管理体系
  20. 龙城战魂--ios技术支持

热门文章

  1. 常见三维文件格式之STL
  2. linux基础命令rpm,rpm常用命令集合1
  3. 在c语言中load,一道题理清Objective-C中的load和initialize
  4. javascript权威指南--学习笔记
  5. python装饰器执行顺序
  6. 构建Squid代理服务器-传统代理、透明代理、反向代理
  7. Windows Server 2016-图形化迁移FSMO角色
  8. 深入理解Three.js(WebGL)贴图(纹理映射)和UV映射
  9. c++中的new_handler
  10. 所以,路遥工具箱到底是什么东西?