看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
650
2022-05-28
Session和Cookie
Session和Cookie的基本原理
Session
Cookie
Session和Cookie的区别
在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面需要登陆之后才能访问,而且登录之后可以连续访问很多次网站,但是可能过一段时间就要重新登录。还有一些网站再打开浏览器时就自动登录了,而且长时间都不会失效。这里就涉及到Session和Cookie。
Session和Cookie的基本原理
Session和Cookie是用于保持HTTP连接状态的技术。在网页或App等应用中基本都会使用到,在爬虫中,也会经常遇到需要写到Cookie应对一般的反爬,下面分别对Session和Cookie的基本原理做简要讲解。
Session
Session代表服务器与浏览器的一次会话过程,这个过程可以是连续的,也可以是时断时续的。Session是一种服务器端的机制,Session对象用来存储特定用户会话所需的信息。Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。
Session的基本原理
(1)当用户访问一个服务器,如果服务器启用Session,服务器就要为该用户创建一个Session,在创建Session时,服务器首先检查这个用户发来的请求里是否包含了一个Session ID,如果包含则说明之前该用户已经登陆过并为此用户创建过Session,那么服务器就按照Session ID把这个Session在服务器的内存中查找出来。
(2)如果客户端请求中不包含Session ID,则为该客户端创建一个Session并生成一个与Session相关的Session ID。要求这个Session ID是唯一的、不易寻找规律的字符串,这个Session ID将在本次响应中返回到客户端保存,而保存这个Session ID的正是Cookie,这样在交互过程中浏览器可以自动地按照规则把这个标识发送给服务器。
Cookie
因为HTTP是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户通过页面购买了一些商品,等到结账时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。为此,就需要用到Cookie。服务器可以设置或读取Cookie中包含的信息,借此维护用户与服务器会话中的状态。
Cookie是有服务器生成后发送给客户端(通常是浏览器)的,Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。
(1)内存Cookie:由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。
(2)硬盘Cookie:保存在硬盘里,有一个过期时间,除非用户手动清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,除非用户手动清理或到了过期时间,硬盘Cookie不会被删除,,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
Cookie的基本原理
(1)创建Cookie:当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作:给该用户生成一个唯一的识别码(Cookie ID),创建一个Cookie对象;默认情况下,它是一个会话级别的Cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(其中将最大时效设为0则是命令浏览器删除该Cookie);然后将Cookie放入HTTP响应报头,将Cookie插入一个Set-Cookie HTTP请求报头中。最终发送该HTTP响应报文。
(2)设置存储Cookie:浏览器收到该响应报文后,根据报文头里的Set-Cookie特殊的指示,生成相应的Cookie,保存在客户端。该Cookie中记录着用户当前的信息。
(3)发送Cookie:当用户再次访问该网站时,浏览器首先检查所有存储的Cookie,如果存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该Cookie附在请求资源的HTTP请求头上发送给服务器。
(4)读取Cookie:服务器接收到用户的HTTP请求保存之后,从报文头获取到该用户的Cookie,从中找到所需要的内容。
Cookie的基本原理图
Session和Cookie的区别
首先Session是存储在服务器端的,Cookie是存储在客户端的,所以Session的安全性要高于Cookie。再者,我们获取的Session中的信息是通过存放在会话Cookie中的Session ID获取的,因为Session是存放在服务器中的,所以Session中的信息不断增加服务器的负担,我们会把一些重要的信息放在Session中,不太重要的信息放在客户端Cookie中,Cookie分为两大类,会话Cookie和持久化Cookie,他们的生命周期和浏览器是一致的,浏览器关了会话Cookie也就消失了,而持久话Cookie会存储在客户端硬盘中。当浏览器关闭时会话Cookie也就消失了,所以Session也就消失了,Session在什么情况下丢失,就是在服务器关闭时,或者Session过期时(默认30分钟)。
HTTP 网络
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。