💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要: 各位小伙伴们大家好呀!今天带来的是cookie和session的讲解,希望大家喜欢!
🤟每日一言: 永远年轻,永远热泪盈眶!
目录
- 前言
- Cookies
- Cookies 的工作流程
- Sessions
- Sessions 的工作流程:
- Cookies 和 Sessions 的区别
- 总结
- 写在最后的话
前言
因为 HTTP 是无状态的,所以为了将一个请求与其他请求相关联,需要一种在 HTTP 请求之间存储用户数据(保持应用程序状态)的方法。Cookies 和 Sessions 都是在浏览器发出的不同请求之间保持应用程序状态的方法。
Cookies
Cookies 是保存在客户端(如浏览器)的一小段数据(最大 4 KB 长),以键值对
的形式保存数据:
name=value; name2=value2
这些数据可以在客户端进行设置,也可以通过服务器使用 HTTP 头进行设置。例如使用 HTTP 头设置 Cookies 到期时间:
Set-Cookie: name2=value2; Expires=Wed, 19 May 2023 10:18:14 GMT
这会让浏览器设置一个名为 name2 的 Cookie,其值为 value2,将在大约 2 年后过期。
Cookies 的工作流程
1.客户端→服务器:HTTP 请求
2.服务器→客户端:HTTP 响应 + Set Cookies
3.客户端→服务器:HTTP 请求 + Cookies
4.服务器→客户端:HTTP 响应
Cookies 通常用于保留登录状态,即从浏览器发送用户名和特殊哈希,服务器根据数据库对其进行检查以允许访问。Cookies 也经常用于 Sessions 创建。
然而,存储在 Cookies 中的数据被认为是不安全的
,因为它以任何人都能看到的文本格式保存在客户端,用户可以轻易修改其内容。当然,Cookies 中也有一些安全属性:
1.HttpOnly:值为 true 或 false,若设置为 true,则不允许通过 JS 脚本 document.cookie 去更改这个值,同样这个值在 document.cookie 中也不可见,这样能有效的防止 XSS 攻击,但在发送请求时依旧会携带此 Cookie
2.Secure:默认为空使用 HTTP。若设置为 true,则浏览器只会在 HTTPS 中传输此 Cookie,不会在不安全的 HTTP 协议中传输此 Cookie
Sessions
上述 Cookies 以及 URL 参数
(例如http://example.com/mypage?d=lol&boo=no
)是在多个请求之间传输数据的合适方法。但是,如果希望数据不被客户端读取 / 编辑【为了安全】,它们就不能满足需求。
解决方案是将该数据存储在服务器端,并给它一个 ID ,只让客户端知道该 ID 并在每次 HTTP 请求时携带该 ID。
于是就有了 Sessions。Sessions 将数据暂时保存在服务器上(无大小限制)
,每个用户都获得一个 Session ID, 该 ID 通过 Cookies 或 GET 请求发送回服务器进行验证。
Sessions 的工作流程:
1.客户端→服务器(请求一):登录认证
2.服务器→客户端:鉴权成功后返回 HTTP 响应 + Set Cookies【包含 Session ID】
3.客户端→服务器(请求二):查看个人信息 + Cookies【包含 Session ID】
4.服务器→客户端:取出 Session ID 判断具体用户
Sessions 通常是短暂的,这使得它们非常适合在应用程序之间保存临时状态。用户关闭浏览器或注销时,Sessions 也会过期。
Sessions 被认为比 Cookies 更安全,因为数据本身保存在服务器上。
Cookies 和 Sessions 的区别
\ | Cookie | Session |
---|---|---|
存储方式 | Cookie 存储在客户端,方便与 JS 交互,方便获取用户信息 | Session 存储在服务端,高效、安全,不依赖浏览器环境 |
存储类型 | Cookie 只能存储 ASCII 码 字符串 | Session 可以存储任意数据类型 |
存储大小 | Cookie 大小有限制(4KB),同一域名下的数量也有限制(20 个) | Session 没有类似的限制(128MB)【可能脚本内存限制 128 MB】 |
生命周期 | Cookie 可设置为长时间保持,比如经常使用的默认登录功能 | Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效 |
安全性 | Cookie 是本地存储,不够安全,别人可以分析存放在本地的 Cookie 并进行欺骗,存在 CSRF 风险 | \ |
特点 | Cookie 是客户端存储用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种方式【通行证】 | Session 是在服务端存储的一个数据结构,用来跟踪用户的状态,这个数据可以保存在内存、文件、数据库中【客户明细表】 |
总结
Cookies 和 Sessions 都是为了在无状态的 HTTP 协议之上维护会话状态,使得服务端可以知道当前是和哪个客户在“打交道”
Sessions ID 是客户端的唯一标识,通常存储在 Cookies 中【浏览器禁用 Cookies 时可以放在 URL 参数中】
,它是维持一个会话的核心
现在大多都是 Sessions + Cookies同时使用,虽然只用 Sessions 不用 Cookies,或是只用 Cookies 不用Sessions 在理论上都可以保持会话状态,但通常不会单独使用
写在最后的话
本文花费大量时间介绍了Cookies与Session
,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!
✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \textcolor{9c81c1}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \textcolor{ed7976}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \textcolor{98c091}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!