前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:说下Cookie和Session的关系和区别

面试官:说下Cookie和Session的关系和区别

作者头像
公众号 IT老哥
发布2021-01-14 16:22:46
16.1K0
发布2021-01-14 16:22:46
举报
文章被收录于专栏:用户7621540的专栏

Cookie 和 Session的关系和区别

在技术面试中,经常被问到“Cookie和Session的区别”,大家都知道一些,Session比Cookie安全,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,恐怕就不怎么清楚了。

本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有更深入的了解。

什么是HTTP

首先要先介绍什么是HTTP

HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。

可是怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

1. Cookie

什么是cookie

Cookie翻译过来是‘ 小甜饼’,Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。

Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下客户端再向服务端发起请求时,客户端会自动在请求报文中加入Cookie值之后发送出去.

之后服务端发现客户端发送过来的Cookie后,会检查是那个客户端发送过来的请求,然后对服务器上的记录,最后得到了之前的状态信息。

客户端保存了Cookie之后的发起请求

上图很清晰地展示了发生Cookie 交互的情景,HTTP 请求报文和响应报文的内容如图所示。

第一可以很明显的可出首部字段内没有Cookie的相关信息,其次也能看到set-Cookie里的信息,这就是服务器端生撑的Cookei信息。

看之后请求,请求报文里都自动发送Cookie信息了。

set-Cookie的字段的属性

代码语言:javascript
复制
Set-Cookie: logcookie=3qjj; expires=Wed, 13-Mar-2019 12:08:53 GMT; Max-Age=31536000; path=/;
 domain=fafa.com;secure; HttpOnly;
复制代码

以上面的set-cookie的例子,说一下set-cookie的属性

1.logcookie=3qjj 赋予Cookie的名称和值,logcookie是名字 ,3qjj是值

2.expires 是设置cookie有效期。当省略expires属性时,Cookie仅在关闭浏览器之前有效。可以通过覆盖已过期的Cookie,设置这个Cookie的过期时间是过去的时间,实现对客户端Cookie 的实质性删除操作。

3.path 是限制指定Cookie 的发送范围的文件目录。不过另有办法可避开这项限制,看来对其作为安全机制的效果不能抱有期待。

4.domain 通过domain属性指定的域名可以做到与结尾匹配一致。比如,指定domain是fafa.com,除了fafa.com那么www.fafa.com等都可以发送Cookie。

5.secure 设置web页面只有在HTTPS安全连接时,才可以发送Cookie。HHTP则不可以进行回收。

6.HttpOnly 它使JavaScript 脚本无法获得Cookie,通过上述设置,通常从Web 页面内还可以对Cookie 进行读取操作。但使用JavaScript 的document.cookie 就无法读取附加HttpOnly 属性后的Cookie 的内容了

2. Session管理和Cookie应用

什么是Session

上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端。

客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie。

因此当我们完全禁掉浏览器的cookie的时候,服务端的session也会不能正常使用。

PHP中的Session在默认情况下是使用客户端的Cookie来保存Session ID的,所以当客户端的cookie出现问题的时候就会影响Session了。

必须注意的是:Session不一定必须依赖Cookie,这也是Session相比Cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把Session ID附着在URL中,这样再通过Session ID就能跨页使用Session变量了。

1.客户端把信息放入报文的实体部分,通常是以POST 方法把请求发送给服务器。

2.服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的信息进行验证,然后把用户的认证状态与Session ID 绑定后记录在服务器端。向客户端返回响应时,会在首部字段Set-Cookie 内写入Session ID(如PHPSESSID=l128ogl…)。你可以把Session ID 想象成一种用以区分不同用户的唯一Id。

步骤三:客户端接收到从服务器端发来的Session ID 后,会将其作为Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID 也随之发送到服务器。服务器端可通过验证接收到的Session ID 验证状态。

3. Cookie与Session的区别

  1. cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

源于:

juejin.cn/post/6844903575684907016

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT老哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cookie 和 Session的关系和区别
    • 什么是HTTP
      • 1. Cookie
        • 什么是cookie
        • set-Cookie的字段的属性
      • 2. Session管理和Cookie应用
        • 什么是Session
      • 3. Cookie与Session的区别
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档