cookie和session技术及实现

cookie和session技术及实现

文章目录

一、前言

cookie和session也是HTTP协议中的一个比较重要的组成部分,我们今天就来探索一下吧~

二、cookie和session

HTTP协议是一种无状态协议 ,即每次服务端接收到客户端的请求时,都是一个全新的请求 ,服务器并不知道客户端的历史请求记录。Session和Cookie的主要目的就是为了弥补HTTP的无状态性

在生活中,我们常常遇到这样的情况:浏览器会收到很多请求头(request),然后构造响应包发送响应,但是不同用户登录的的都是自己的个人中心,这是如何做到的呢?

每个请求都是独立 的,服务器为了能够区分不同的用户所携带的信息和构造对应的数据,就有了Cookie和session

2.1.1 概述

HTTP协议中的Cookie和Web Cookie、浏览器Cookie,它是服务器 发送到Web浏览器的一小块数据。服务器发送到浏览器的Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器,进行构造HTML、CSS、JS等

Cookie是在传统的HTTP协议上 增加的字段 ,作用类似身份证。它是服务器生成的能够识别客户端的信息,在本地浏览器进行存储,浏览器以后只要访问此的网站,就会自动携带这个cookie信息,通过请求数据发给服务器,服务器认出这是自己生成的"信物",就会生成对应的页面(个人中心之类)

Cookie主要应用

  • 会话管理

    登录、购物车、游戏得分或者服务器应该记住的其他内容

    会话:应用之间在沟通

  • 个性化

    用户偏好、主题或者其他设置

    如:不同用户的主页不同

  • 追踪

    记录和分析用户行为

    把浏览的记录也存储进去了

弊端

  • Cookie曾经用于一般的客户端存储。虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储API。Cookie随每个请求一起发送 ,因此它们可能会降低性能(尤其是对于移动数据连接而言)

  • cookie的信息是可以修改的,会欺骗服务器,混淆服务器处理的业务

    后来,随着技术发展,进行了改进:服务器能够识别用户状态(例如:vip),这类数据不要存在客户端里,直接放到服务器里(用户就没有权限修改了),就衍生出了session技术

2.1.2 过程

当接收到客户端发出的HTTP请求时,服务器可以发送带有响应Set-Cookie 标头,Cookie通常由浏览器存储 ,然后将Cookie 与HTTP标头一同向服务器发出请求

  • Set-Cookie和Cookie标头:

    Set-CookieHTTP响应标头 将Cookie从服务器发送到用户代理

    此标头告诉客户端存储Cookie

    现在,随着对服务器的每个新请求 ,浏览器将使用Cookie头,将所有以前存储的Cookie发送回服务器

如图

Cookie就像是牌照(令牌)

2.1.3 Cookie类型

有两种类型的Cookie:

  • 一种是Session Cookie(会话Cookie)

    会话Cookie有个特征:客户端关闭时Cookie会删除,因为它没有指定Expires(特定日期)或Max-Age(特定长度)指令

    会话Cookie存储在内存中,永远不会写入磁盘。

  • 一种是Persistent Cookie(持久性Cookie)

    如果Cookie包含有效期,则将其视为持久性Cookie。在到期指定的日期或长度之外,Cookie将从磁盘中删除

    复制代码
    // 永久性Cookie
    Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2023 07:28:00 GMT;

但是,Web浏览器可能会使用会话还原,这会使大多数会话Cookie保持永久状态,就像从未关闭过浏览器一样

2.1.4 其他细节
  • 在访问一个网站时,会出现其他网站的cookie吗

    答:不会,cookie是和IP地址绑在一起的

  • 对Cookie的争论

    尽管Cookie能够简化用户的网络活动,但是Cookie的使用存在争议,因为不少人认为它对用户是一种侵权行为。因为结合Cookie和用户提供的账户信息,Web站点可以知道更多关于用户的信息

2.2 session

2.2.1 概述

session就是服务器提供仓库,专门保存每一个用户链接所需要的数据(身份信息,身份状态)这些信息完全没有必要一直保存,需要有时效性。这些信息往往会放到内存数据库里(典型:redis 内存数据库)

session可以理解为小仓库,10个人就有10个小仓库(10个session)

数据库:新建数据文件(逐渐变大)

客户端发来请求,究竟哪个仓库是这个客户端的呢?(session如何判断是否是同一会话)

需要服务器将这个仓库的唯一状态值,通过cookie技术,给到浏览器,也就是sessionId

session_id要求不能被用户猜测到,具有随机性

2.2.2 过程

客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是Session对象,存储结构是一个Map映射,具体一点是ConcurrentHashMap。Session弥补了HTTP无状态特性,服务器可以利用Session存储客户端在同一个会话期间的一些操作记录

服务器第一次接收到请求时,开辟了一块Session空间(创建了Session对象),同时生成 了一个sessionId,并通过响应头的Set-Cookie:JSESSIONID=XXXXXXX命令,向客户端发送要求设置Cookie的响应;客户端收到响应后,在本机客户端设置了一个JSESSIONID=XXXXXXX的Cookie信息,该Cookie的过期时间为浏览器会话结束

接下来客户端每次向同一个网站发送请求时,请求头都会带上该Cookie信息(包含sessionId),然后服务器通过读取请求头中的Cookie信息,获取名称为JSESSIONID的值,得到此次请求的sessionId

弊端:比如A服务器存储了session,就是做了负载均衡后,假如一段时间内A的访问量激增,会转发到B进行访问,但是B服务器并没有存储A的session,会导致session的失败

cookie里存的就是sessionId了,本质还是换汤不换药

三、Web缓存

万维网缓存又称Web缓存(Web Cache),可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器(Proxy Server)

Web缓存(Web cache)也叫做代理服务器缓存,它是代表HTTP服务器来满足用户需求的网络实体Web缓存器有自己的磁盘存储空间,并会在存储空间内保存最近请求过的对象,如下图:

Web缓存可以在用户的浏览器中进行配置,一旦配置后,用户首先访问的就不是初始服务器了,需要先访问代理服务器判断请求的对象是否存在。如果代理服务器没有,再由代理服务器来请求初始服务器把对象返回给客户,同时在自己的磁盘空间保存对象

这里需要注意,客户和初始服务器的架构是客户-服务器模式,而代理服务器不仅能当服务器使用,也可以当作客户端使用

四、小结

HTTP协议中cookie字段的加入使得浏览器得以存储不同用户的信息,展现出个性化的表达。鉴于cookie容易泄露的风险,于是又出现了session,一个存储在服务端的"小仓库",使得cookie作为存储sessionID的小代理,真正的客户信息得以安全存储。

Web缓存也是一种提升网站性能和用户体验的关键技术

相关推荐
_F_y4 小时前
五种IO模型
服务器·网络
大连好光景4 小时前
socket.socket模块--网络通信
网络·python·网络协议
掘根4 小时前
【消息队列项目】服务器实现
运维·服务器
一只旭宝4 小时前
Linux专题十:I/O 复用进阶(LT/ET 模式)同步,异步阻塞,以及 libevent 库核心知识点
linux·服务器·网络
菩提小狗4 小时前
第1天:基础入门-操作系统&名词&文件下载&反弹SHELL&防火墙绕过|小迪安全笔记|网络安全|
网络·笔记·学习·安全·web安全
wniuniu_4 小时前
ceph修改
网络·ceph
想做后端的小C4 小时前
Linux:期末考点
linux·运维·服务器
就叫飞六吧4 小时前
wrk:现代 HTTP 性能测试工具(类cc)
网络协议·测试工具·http
jimy14 小时前
本地下载vscode server安装包(tar.gz)然后上传至服务器开发机
服务器·ide·vscode