Cookie与Session

代码涟漪
• 阅读 851

Cookie

HTTP是一种不保存状态的协议,也就是无状态协议。Http自身不对请求和响应之间的通信状态做出保存,也就是说在在HTTP这个级别,协议对于发送过的请求和响应都不做出保存。

事实上:由于通常一台服务器会服务于几万个甚至更多的客户(客户端),如果把所有的客户端信息都记录下来,那么会大大增加服务器的压力,HTTP协议是无状态的,也就意味着服务器没法记住某个客户发出的请求和做出的响应,这样的话客户下一次再次请求时,服务器也无法识别这个客户,因此又会做出新的响应。比如登录时,客户明明已经登录过了,但是跳转到网站的其他页面,由于是服务器是无状态的服务器还得请求一次。为了实现期望的保持状态功能,于是引入了cookie技术。

Cookie是保存在客户端的小段文本,随着客户端每一个请求发送该url下的所有cookies到服务器端。

Cookie与Session

Cookie的详细工作流程如下:Cookie与Session

1、第一次请求时,浏览器中是没有cookie信息的。

Cookie与Session

2、服务器接收到请求后,会首先检查是否存在Cookie,如果没有Cookie,会生成一个Cookie。在响应头中Set-Cookie中生成Cookie信息。生成的Cookie文本中,存在一个sessionId,服务器会记录下来这个sessionId。

Cookie与Session

3、客户端再次请求时,浏览器会自动将Cookie信息添加到请求头上,服务器接到请求会根据sessionId来判断身份。

Cookie与Session

Session

Session保存在服务器端(在服务器端生成),通过唯一的sessionId来区别每一个用户。sessionId随每个请求发送到服务器(sessionId实际上是Cookie中的一个字段),Session实际上是一个保存在服务器的数据表,每一个sessionId对应一个用户。通过Cookie获取到SessionId,然后再通过session的key获取session值。

Cookie与Session

思考:如果不使用Cookie能不能实现维持会话?

仔细分析Cookie的功能,我们使用Cookie最重要的就是保存了一个sessionId然后每次请求时,在请求头中携带过去。如果没有了Cookie,那么我们可以不可以通过其他的手段把这个sessionId发送到服务端,并通过其他手段再吉首这个sessionId。比如我们可以通过在Url后面添加上sessionId,这样的话服务器端也能获取到sessionId,然后 服务端再将sessionId返回回来,客户端再进行保存。这样的话也能够实现类似于Cookie的功能,但是这样不太安全,因为sessionId直接在Url后面是可见的,很容易就被模仿了。也存在一个方法提高安全性,那就是服务器产生一个tooken,每请求一次tooken发生变化,tooken只能使用一次,这样也能提高安全性。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 实现websocket
最近了解了下websocket和socket这个东西,说不得不来说下为何要使用WebSocket,和为何不用http。为何需要WebSocket?HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。这种通信模型有一个弊端:HTTP协议无法实现服务器主
海军 海军
4年前
5分钟快速梳理你的HTTP体系
HTTP定义1.HTTP(超文本传输协议)是客户端与服务端之间信息交流的桥梁。2.在信息交流之前必须要做的就是客户端通过连接TCP/IP协议80端口,以便服务端侦听HTTP请求。3.HTTP是一种通用的,无状态的应用层协议,基于标准客户机/服务器模型。HTTP特点1.采用“请求/
Stella981 Stella981
3年前
Django用户认证
COOKIE与SESSION概念cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这
Stella981 Stella981
3年前
Django 之 cookie和session
一、Cookie1、Cookie的由来因为HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,也不会受前后请求响应情况直接影响。简而言之,对服务器来说,每一次请求都是全新的。状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态就是这些数据不
Stella981 Stella981
3年前
Django初识(web框架,django下载安装,http协议)
一web框架的本质及自定义web框架我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求,服务端按照http协议的响应协议来响应请求,这样的网络通信,我们就
Stella981 Stella981
3年前
Kurento协议
Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或JavaScript。这些客户端使用Kuernto协议来和KMS通信。Kurento协议是基于WebSocket协议,并使用了JSONRPCV2.0消息来提交请求和发送响应。JSONRPC消息格式Kurento协议使用JSONRPCV2.0编码它的消
Stella981 Stella981
3年前
Django_初识
HTTP协议超文本传输协议(应用层的,基于tcp\ip协议的)特点:无状态,无连接(短连接)请求消息格式:请求行\请求头部\空行\请求数据请求行:GET路径HTTP/1.1响应消息格式:响应行\响应头部\空行\响应数据响应行:HTTP/1.1状态码状态
Wesley13 Wesley13
3年前
HTTP状态码
消息(1字头)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。100Continue客户端应当继续发送请求。这个临时响应是
Stella981 Stella981
3年前
Django基础一之web框架的本质
一web框架的本质及自定义web框架我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求,服务端按照http协议的响应协议来响应请求,这样的网络通信,我们就可以自
Wesley13 Wesley13
3年前
PHP实现异步调用方法研究
浏览器和服务器之间是通过HTTP协议进行连接通讯的。这是一种基于请求和响应模型的协议。浏览器通过URL向服务器发起请求,Web服务器接收到请求,执行一段程序,然后做出响应,发送相应的html代码给客户端。这就有了一个问题,Web服务器执行一段程序,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了
3A网络 3A网络
2年前
一文读懂浏览器存储与缓存机制
一文读懂浏览器存储与缓存机制浏览器存储CookieCookie是HTTP协议的一种无状态协议。当请求服务器时,HTTP请求都需要携带Cookie,用来验证用户身份。Cookie由服务端生成,存储在客户端,用来维持状态。通常Cookie由以下值构成:名称(name)值(value)域(Domain)值(value)路径(Path)