cookie、session和token的区别

简介: cookie、session、token没有绝对的好与坏之分,主要还是要结合实际的业务场景和需求来决定采用哪种方式来管理会话,当然也可以三种都用。

cookie

cookie 指的就是浏览器里面能永久存储的一种数据。跟服务器没啥关系,仅仅是浏览器实现的一种数据存储功能。

cookie由服务器生成,发送给客户端浏览器,浏览器把cookie以KV形式存储到某个目录下的文本文件中,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间。所以每个域的cookie数量是有限制的。

session

session从字面上讲,就是会话。这个就类似你和一个人交谈,你怎么知道当时和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他是张三;

session也是类似的道理,服务器要知道当前请求发给自己的是谁。为了做这种区分,服务器就是要给每个客户端分配不同的"身份标识",然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自与谁了。

至于客户端怎么保存这个“身份标识”,可以有很多方式,对于浏览器客户端,大家都采用cookie的方式。

image.png

  • 用户向服务器发送用户名和密码
  • 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色, 登陆时间等;
  • 服务器向用户返回一个session_id, 写入用户的cookie
  • 用户随后的每一次请求, 都会通过cookie, 将session_id传回服务器
  • 服务端收到 session_id, 找到前期保存的数据, 由此得知用户的身份

存在的问题及解决方案

(1)主要问题:不易扩展

(2)解决方案

单机当然没问题, 如果是服务器集群, 或者是跨域的服务导向架构, 这就要求session数据共享,每台服务器都能够读取session。

举例来说, A网站和B网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现?这个问题就是如何实现单点登录的问题

-Nginx ip_hash 策略,服务端使用 Nginx 代理,每个请求按访问 IP 的 hash 分配,这样来自同一 IP 固定访问一个后台服务器,避免了在服务器 A 创建 Session,第二次分发到服务器 B 的现象。

-Session复制:任何一个服务器上的 Session 发生改变(增删改),该节点会把这个 Session 的所有内容序列化,然后广播给所有其它节点。

image.png

-共享Session:将Session Id 集中存储到一个地方,所有的机器都来访问这个地方的数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败;

image.png

-另一种方案是服务器索性不保存session数据了,所有数据就保存在客户端,每次请求都发回服务器。这种方案就是接下来要介绍的基于Token的验证;

Token

image.png

  • 用户通过用户名和密码发送请求
  • 程序验证
  • 程序返回一个签名的token给客户端
  • 客户端储存token,并且每次使用发送请求
  • 服务端验证Token并返回数据

Cookie和Session的区别

  • 存储位置不同: cookie数据存放在客户的浏览器上,session数据放在服务器上
  • 隐私策略不同:cookie不是很安全, 别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  • session会在一定时间内保存在服务器上。当访问增多,就会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
  • 存储大小不同: 单个cookie保存的数据不能超过4k, 很多浏览器都限制一个站点最多保存20个cookie

一般建议: 将登陆信息等重要信息存放为session, 其他信息如果需要保留,可以放在cookie中

2、Token和Session的区别

Session是一种HTTP储存机制, 为无状态的HTTP提供持久机制;

Token就是令牌, 比如你授权(登录)一个程序时,它就是个依据,判断你是否已经授权该软件;

Session和Token并不矛盾,作为身份认证Token安全性比Session好,因为每一个请求都有签名还能防止监听以及重放攻击,而Session就必须依赖链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加Session来在服务端保存一些状态。

3、token和cookie区别

token和cookie一样都是首次登陆时,由服务器下发,都是当交互时进行验证的功能,作用都是为无状态的HTTP提供的持久机制。

token存在哪儿都行,localstorage或者cookie。

token和cookie举例,token就是说你告诉我你是谁就可以。

对于token而言,服务器不需要去查看你是谁,不需要保存你的会话。当用户logout的时候cookie和服务器的session都会注销;但是当logout时候token只是注销浏览器信息,不查库。

token优势在于,token由于服务器端不存储会话,所以可扩展性强,token还可用于APP中。

目录
相关文章
|
9天前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
22天前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
5天前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
16 0
|
10天前
|
存储 JSON 数据安全/隐私保护
Cookie + Session 的时代已经过去了?
在探讨“Cookie + Session”这一经典组合是否已经过时的议题时,我们首先需要理解它们在Web应用认证和会话管理中的历史地位与当前面临的挑战。随着Web技术的飞速发展,特别是无状态服务、OAuth、JWT(JSON Web Tokens)等技术的兴起,这一传统机制确实面临了前所未有的变革压力。但说它“完全过去”或许过于绝对,因为它在特定场景下仍发挥着重要作用。
21 0
|
2月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
114 0
|
4月前
|
存储 编解码 应用服务中间件
会话跟踪技术(Session 以及Cookie)
会话跟踪技术(Session 以及Cookie)
|
2月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
72 1
|
2月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
39 1
|
2月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
37 2
|
2月前
|
存储 缓存 安全
Cookie和Session
【8月更文挑战第20天】
17 1