1.3 Session和Cookie

在了解Session和Cookie之前,我们先来了解几个基本的概念。

1、基本概念

静态网页和动态网页

静态网页是提前制作好的,以HTML、CSS、JavaScript等静态代码为基础,内容固定不变,用户访问时服务器直接将静态文件传输给用户端浏览器。静态网页通常适用于内容不需要频繁更新的站点,如企业官网、产品展示页等。静态网页加载速度快、编写简单,同时也存在很大的缺陷,如可维护性差、不能根据URL灵活多变地显示内容等。动态网页则是在用户请求时生成网页内容,例如用户交互、数据库查询等操作都可以影响网页内容的呈现。动态网页可以动态解析URL中的参数的变化,关联数据库并动态呈现出不同的页面内容,我们现在看到的网站基本上都是动态网站。常见的动态网页技术包括PHP、ASP.NET、Java Servlet等。此外,动态网站还可以实现用户注册和登录等功能。

无状态HTTP

HTTP(超文本传输协议)是一个无状态协议,这意味着每个HTTP请求都是相互独立的,服务器不会保留与之前请求相关的信息,服务器并不知道客户端处于什么状态。客户端发送请求,服务端解析该请求并做出响应,服务器完成这个过程时完全独立的,服务器不会记录前后状态的变化。这意味着之后想要继续处理前面的信息,我们必需重新传递一些重复的请求,才能获得后续响应。这时,便可以利用Session和Cookie保持HTTP前后连接状态

2、Session和Cookie

Session在服务端,用来保存用户的Session信息;Cookie在客户端(浏览器端),浏览器下次访问相同页面时会自动附上Cookie,并发送给服务器,服务器通过Cookie识别登录用户,并判断该用户的登录状态,并返回对应的响应。可以这样理解,Cookie里面携带了用户的登录凭证,下次访问相同页面时,就不用再次输入用户名和密码了。

PS:在爬虫中,处理需要先登录才能访问的页面时,我们一般会将登录成功后获得的Cookie放在请求头里直接请求,而不重新模拟登录。

Session

是服务器端的一种会话机制,通过在服务器端创建唯一的会话ID来区分不同的用户并将会话ID存储在浏览器中的Cookie或者浏览器地址中。当下一次用户再次访问该网站时,服务器通过收到的会话ID找到对应的Session数据,实现用户自动登录、跨请求传输数据等功能。Session需要在服务器端存储数据,当服务器重启或者Session过期、被清除时,Session中存储的数据也就被清除了。

Cookie

是浏览器的一种存储机制,由服务器在HTTP响应头部中设置,在浏览器中建立一个文本文件,一般包含名称、有效期、域名、路径、内容等信息。每次浏览器发起请求时,都会携带该域名下的Cookie信息,服务器解析Cookie信息,实现用户跟踪、身份认证和个性化定制等功能。与Session不同,Cookie存储在客户端浏览器中,可以通过JavaScript修改和读取,除非手动清除或者到达过期时间,否则一直存在于浏览器上,即使关闭浏览器也可以继续使用。

Session维持

在客户端第一次请求服务器时,服务器会返回一个带有Set-Cookie字段的响应给客户端,用于标记用户。客户端(浏览器)会把Cookie保存起来,当下一次访问相同网站时,把Cookie放在请求头里一起提交给服务器。Cookie中携带者Session ID相关信息,服务器通过检查Cookie即可找到对应的Session,并通过Session判断用户状态。若Session是有效的,则服务器返回登录后的页面,反之,则会收到错误的响应或者跳转到登录页面要求用户重新登录。

Cookie属性结构

接下来我们以知乎为例,来了解一下Cookie的属性结构。

在这里插入图片描述

属性 说明 备注
Name Cookie的名称 Cookie一旦创建,名称便不可更改
Value Cookie的值 如果值为Unicode字符,则需要为字符编码;如果值为二进制数据,则需要使用BASE64编码
Domain 指定可以访问该Cookie的域名 例如设置Domain为.zhihu.com,表示所有以zhihu.com结尾的域名都可以访问该Cookie
Path Cookie的使用路径 若设置为/path/,则只有路径为/path/的页面才可以访问该Cookie,若设置为/,则本域名下的所有页面都可以访问该Cookie
Expires/Max-Age Cookie失效的时间 若Max-Age为正数,则Cookie将在Max-Age秒后失效,若为负数,则Cookie将在浏览器关闭时失效
Size Cookie的大小,单位为字节 一般来说,浏览器对Size有一定的限制,常见的限制是4KB(4096字节)左右
HttpOnly 用于告诉浏览器,在发送HTTP请求的时候,不要在请求中暴露Cookie的值,以提高Cookie的安全性 若此属性为true,则只有在HTTP Headers中才会带有此外Cookie信息,而不能通过document.cookie来访问此Cookie
Secure 是否仅允许使用安全协议传输Cookie 安全协议有HTTPS和SSL等,使用这些协议在网络上传输数据之前会先将数据加密。其默认值为false
SameSite 限制浏览器是否发送Cookie,以及何时发送Cookie,防止某些类型的跨站请求伪造(CSRF)攻击,同时可以增强用户的隐私保护 SameSite属性可以设置为三种值:Lax、Strict和None。Lax:在跨站点的情况下,只有在用户正在导航到与当前页相同的站点时,Cookie才会被发送。在同一站点的情况下,Cookie则可以正常发送。Strict:在所有情况下,Cookie都只会在同一站点情况下发送,跨站点情况下不会发送。None:在任何情况下,Cookie都可以被发送

PS:后两项Partition Key和Priority不属于Cookie属性,感兴趣可自行了解

会话Cookie和持久Cookie

会话Cookie指把Cookie放在浏览器内存里,关闭浏览器后,Cookie失效;持久Cookie则会把Cookie保存到服务器硬盘中,Cookie长期有效,直至到达失效时间。

猜你喜欢

转载自blog.csdn.net/weixin_75094128/article/details/131405851
1.3