咱上网冲浪的时候,天天和各种网站、APP打交道。但HTTP协议有个“毛病”——它记性不好,每次请求都像第一次见面,根本不记得之前和你聊过啥。为了解决这个问题,程序员们整出了CookieSessionToken这三个“神器”,它们就像我们在网络世界的身份证、通行证,帮服务器记住你是谁,都干了啥。今天咱就唠唠这仨到底是干啥的,有啥不一样!

一、Cookie、Session和Token都干啥用?

1.1 Cookie:浏览器帮你记事儿的小本本

Cookie就是服务器给浏览器塞的小纸条,存的都是些用户信息,像登录状态、浏览偏好啥的。举个例子,你第一次进某个网站,选了中文界面、深色模式,下次再访问,网站秒变你喜欢的样子,这背后就是Cookie在偷偷“记笔记”。不过这小纸条存你电脑里,容易被人偷看,所以得小心点用!

1.2 Session:服务器的专属“私人档案库”

Session相当于是服务器自己的“小账本”,专门用来存用户的会话数据。当你登录网站,服务器就给你开个“档案袋”,把你购物车有啥、订单到哪一步了这些信息全塞进去。但它咋知道这份档案归谁呢?靠的就是Cookie里的Session ID,相当于档案编号,浏览器每次带着编号来,服务器一看就知道:“哦!原来是你!”

1.3 Token:万能通行令牌

Token就是服务器发的一串乱码“令牌”,你拿着它去访问网站的各种服务,就像拿着身份证证明“我是我”。Token最大的好处是不用服务器记太多东西,你每次来,它只需要验证令牌是真是假就行。现在流行的前后端分离、第三方登录,基本都靠Token“打天下”,移动端APP更是离了它不行。

二、Cookie、Session和Token,到底咋区分?

2.1 都藏在哪?能存多少东西?

Cookie就住你电脑里,浏览器帮你保管。不过它个头很小气,一般不能超过4KB,而且一个网站最多也就存50个左右。

Session住在服务器那边,理论上想存多少存多少,但服务器空间有限,存太多也顶不住。

Token呢,既可以放在客户端(比如APP里),也能在每次请求的时候跟着一起“跑”,大小没严格限制,通常几百字节。

2.2 安不安全?容易被偷吗?

Cookie因为在客户端,就像放在桌子上的纸条,很容易被人篡改。不过可以给它加把锁:

  • HttpOnly让JavaScript读不到它
  • Secure保证它只在安全的HTTPS通道里传送
  • SameSite防止被别人“冒名顶替”发请求

Session数据在服务器,相对安全些,但要是Session ID被坏人搞到手,也能冒充你。

Token用签名加密,一般改不了,但一旦被偷,坏人也能用,所以得设个有效期,到期就作废。

2.3 怎么在网络里“传送”?

  • Cookie最“自觉”,浏览器每次发请求,都会自动把相关的Cookie带上,除非你特意限制它。
  • Session得靠Cookie帮忙传递Session ID,虽然也能藏在URL里,但容易暴露,不太安全。
  • Token就比较“自由”,常见的是放在请求头的Authorization字段里,也能塞到请求体或URL里,全看开发者咋安排。

2.4 能用多久?啥时候过期?

  • Cookie想“活”多久,由服务器说了算。设置了expiresmax-age,它就是“长寿型”,到期才失效;不设置的话,浏览器一关,它就“凉凉”。
  • Session和Cookie里的Session ID绑在一起,服务器还会设个“闲置超时”,比如30分钟没操作,直接清空档案。
  • Token出生的时候就被定好了“保质期”(像JWT的exp字段),过期就得重新申请新令牌。

2.5 能不能适应复杂的网络环境?

要是网站用的是分布式系统(多个服务器协同工作),Cookie + Session组合就有点“吃力”。因为Session存在服务器里,多个服务器之间得同步数据,不然容易“认不出”用户。

Token就没这烦恼,它不需要服务器存啥,验证一下令牌是真是假就行,特别适合微服务、跨域这种复杂场景。

三、生活里都在哪见过它们?

3.1 Cookie的“日常工作”

  • 刷新闻的时候,为啥总给你推爱看的内容?Cookie在“搞事情”!它记住了你的兴趣标签。
  • 还有电商网站没登录时加进购物车的商品,也是Cookie临时存着。不过拿Cookie做广告追踪得小心,一不小心就违反隐私规定了。

3.2 Session的“用武之地”

电商平台的购物车、订单状态,后台管理系统的用户权限,在线聊天的实时状态……这些对安全性、实时性要求高的场景,都是Session的主场。服务器随时能查看、修改你的会话数据,还能强制你下线,安全感拉满!

3.3 Token的“高光时刻”

  • 现在很多网站支持微信、GitHub一键登录,靠的就是Token在不同平台间“传话”。
  • 前后端分离项目里,前端和后端不在一个域名下,Token能轻松实现跨域认证。
  • 还有手机APP,没Cookie可用,Token就是它唯一的“身份认证官”。

四、到底该选谁?

简单来说:

  • Cookie适合存点小偏好、临时数据
  • Session适合对安全要求高、需要集中管理的场景
  • Token则是跨域、移动端、微服务的“心头好”

实际开发中,大家经常把它们搭配着用,比如用Cookie传Session ID,或者把Token藏在Cookie里,增强安全性。具体咋选,还得根据业务需求,综合考虑安全、性能这些因素,找到最适合的方案!

要是你对哪个部分还有疑问,或者想知道更多实战技巧,欢迎随时来唠嗑!

一文读懂Cookie、Session和Token:原理、区别与应用场景的更多相关文章

  1. 一文搞懂Cookie,Session,Token,JWT

    HTTP协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息.这样一些交互业务就无法支撑了.Cookie应运而生. Cookie 通过F12开发者工具,先瞅瞅Cookie的颜值 从图中 ...

  2. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  3. [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路   http://www.52im.net/thread-1709-1-2.html     本文原作者阮一峰,作者博客:r ...

  4. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  5. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  6. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  7. 一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...

  8. 一文读懂数仓中的pg_stat

    摘要:GaussDB(DWS)在SQL执行过程中,会记录表增删改查相关的运行时统计信息,并在事务提交或回滚后记录到共享的内存中.这些信息可以通过 "pg_stat_all_tables视图& ...

  9. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  10. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

随机推荐

  1. 面试题-Netty框架

    前言 Netty框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮 ...

  2. nodejs集群

    nodejs集群 单个 Node.js 实例运行在单个线程中. 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务. 集群中的Master 现在让我们详细了解Master的职责 ...

  3. HTB打靶记录-Vintage

    信息收集 nmap -sV -sC -O 10.10.11.45 Nmap scan report for 10.10.11.45 Host is up (2.1s latency). Not sho ...

  4. HTB-UnderPass

    该靶机nmap扫描udp发现161端口snmp服务,利用snmpwalk扫描得到目录信息,使用dirsearch扫描得到一个yml文件,存放数据库账号密码,记录下来,此时需要登录口,使用字典扫描拼接/ ...

  5. luaL_ref如何使用

    // main.lua中有个全局函数function gf() print("hello world")end// c++中处理void callgf(){ lua_getglob ...

  6. Selenium反屏蔽处理

    Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...

  7. Yuque Rich Text(语雀富文本编辑器)

    Yuque Rich Text(语雀富文本编辑器) 由于本人觉得语雀编辑器非常好用,很符合我的使用习惯,然后发现语雀的Chrome浏览器插件实现了编辑器的功能,所以将其富文本的功能拆分位一个单独的Vu ...

  8. 从源码看 QT 的事件系统及自定义事件

    事件是程序内部或外部触发的动作或状态变化的信号.在 Qt 中,所有事件都是 QEvent 派生类的对象,事件由 QObject 派生类的对象接收和处理.每一个事件都有对应的 QEvent 派生类,当事 ...

  9. C# 线程(二)——Thread学习

    参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...

  10. 记录一次mysql数据库修复过程

    1. 场景 最近在使用小皮面板进行靶场搭建的时候,发现数据库一直无法启动,而在虚拟机里是可以启动了,这就很奇怪了.意识到我的本地已经安装了mysql,可能产生了冲突,但是当我兴冲冲启动本地mysql的 ...