Session、Cookie、token

本文深入探讨了Session、Cookie和Token三种会话管理技术的特点与区别,分析了它们在安全性、存储位置、容量限制及应用场景上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Session

session 的中文翻译的“会话”,当用户打开某个 web  应用时,便与 web 服务产生一次 session ,服务器使用 session 把用户信息临时保存在服务器上,当用户离开网站后,session 被销毁。

这种用户存储方式相对于 cookie 更安全,可能 session 有一个缺陷:如果web 服务器做了负载均衡,那么下一次操作请求到另一台服务器时候,session 会丢失。

二、Cookie

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

Cookie 的组成有:名称(Key),值(Value),有效域(domain),路径(一般设置为全局“\”),失效时间,安全标志(指定后,cookie 只有在使用 SSL 连接时才发送到服务器(https))

用户登录时产生的cookie:

document.cookie = "id="+result.data['id']+"; path=/";

document.cookie = "name="+result.data['name']+"; path=/";

document.cookie = "avatar="+result.data['avatar']+"; path=/";

使用到cookie时做如下解析:

var cookie = document.cookie;var cookieArr = cookie.split(";");var user_info = {};for(var i = 0; i < cookieArr.length; i++) {

    user_info[cookieArr[i].split("=")[0]] = cookieArr[i].split("=")[1];

}

$('#user_name').text(user_info[' name']);

$('#user_avatar').attr("src", user_info[' avatar']);

$('#user_id').val(user_info[' id']);

三、Token

token 的意思是 “令牌”,是用户身份验证的方式,最简单的 token 组成:uid(用户唯一标识)、time(当前时间戳)、sign(签名,由token 的前几位+盐 以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接 token 请求服务器)

还可以把不变的参数也放进 token ,避免多次查库

四、cookie 与 session 的区别

1.cookie 数据存放在客户端的浏览器上,session 数据放在服务器上

2.cookie 不是很安全,别人可以分析存放在本地的cookie 进行 cookie 欺骗,考虑安全应当使用session

3.session 会在一定时间内保存到服务器上,当访问增加,会占用服务器性能,考虑服务器性能方面,应当使用 cookie

4.单个 cookie 保存的数据不能超过 4K,很多浏览器限制一个站点最多保存 20 个cookie

5.登录重要信息放在session 

  其他信息放在 cookie

五、token 与 session 的区别

session 和 oauth token  不矛盾,作为身份认证 token 安全性比session 好,因为每个请求都有签名还能防止监听以及重放攻击,而 session 就必须靠链路层来保障通讯安全。

app 通常用 restful api 与 servlet 打交道,rest 是 stateless的,也就是 app 不需要像 浏览器那样用 cookie 来保存 session ,可以在 app 里嵌入 webkit ,用隐蔽的 browser 来管理cookie session.

   Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。所谓Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 
而Token ,如果指的是OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对App 。其目的是让 某App有权利访问 某用户 的信息。这里的 Token是唯一的。
不可以转移到其它 App上,也不可以转到其它 用户 上。 转过来说Session 。Session只提供一种简单的认证,即有此 SID,即认为有此 User的全部权利。是需要严格保密的,这个数据应该只保存在站方,
不应该共享给其它网站或者第三方App。 所以简单来说,如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 。如果永远只是自己的网站,自己的 App,用什么就无所谓了。   token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件;cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,
就会自动调用cookie自动登录用户名;session和cookie差不多,只是session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号.Session的状态是存储在服务器端,客户端只有session id;
而Token的状态是存储在客户端。

 参考:https://blog.youkuaiyun.com/jikeehuang/article/details/51488020

转载于:https://www.cnblogs.com/baizhuang/p/11562251.html

### 回答1: SessionCookieToken、JWT都是在Web开发中用于管理用户身份认证和会话管理的工具。 1. SessionSession指的是服务器端保存的用户信息。当用户登录成功后,服务器会创建一个session,为该用户分配一个session ID,并将该ID保存到cookie中,发送给客户端。客户端浏览器保存了这个cookie,以后每次请求都会带上这个cookie,服务器通过这个cookie就可以识别出用户身份,从而进行相应的操作。Session机制存在一定的风险,比如会话劫持、会话固定等问题,需要注意安全性。 2. CookieCookie是一种客户端保存用户信息的机制,它是由服务器在响应HTTP请求时通过Set-Cookie头部字段发给客户端浏览器的一小段文本信息。浏览器将这些信息保存在客户端,以后每次向服务器发送请求时都会自动带上这些cookie,从而实现身份认证和会话管理。但是Cookie也存在一些安全问题,比如会话劫持、跨站脚本攻击等问题。 3. TokenToken是一种用户身份认证和授权的机制,通常由服务器生成,以便在客户端和服务端之间进行身份认证和授权。客户端在登录成功后,服务器会为该用户生成一个Token,并将Token发送给客户端浏览器。客户端在之后的请求中需要携带该Token,服务器验证Token的有效性后,就可以识别出用户身份,并进行相应的操作。Token相比SessionCookie,具有更高的安全性和可扩展性。 4. JWT:JWT是一种基于Token的身份认证和授权机制。JWT包含三部分,分别是头部、载荷和签名。头部包含加密算法和类型等信息;载荷包含用户的身份信息和相关的元数据等信息;签名则是对头部和载荷进行签名生成的一段密文,用于验证Token的有效性。JWT具有无状态、可扩展、跨域等特点,被广泛用于Web开发中的用户身份认证和授权。 ### 回答2: SessionCookieToken和JWT都是常见的身份验证和会话管理方法。下面我会分别介绍它们。 SessionSession是服务器端记录用户状态的一种机制。当用户通过用户名和密码登录后,服务器会为该用户创建一个唯一的Session。之后,用户再发送请求时,服务器会根据Session来识别用户并获取用户的状态信息。 CookieCookie是一种在客户端存储的小型文本文件。在用户通过用户名和密码登录成功后,服务器可以将一个包含Session信息的Cookie发送给客户端,客户端会将该Cookie保存下来。之后,客户端发送请求时,会自动附带上该Cookie,用于向服务器证明用户的身份。 TokenToken是一种代表用户身份的令牌。Cookie不同,Token是在客户端保存的,并且不需要服务器端存储用户状态。当用户登录成功后,服务器会生成一个Token并发送给客户端,客户端将其保存起来。之后,客户端发送请求时,会将Token作为请求头信息的一部分发送给服务器,服务器根据Token验证用户身份。 JWT:JWT(JSON Web Token)是一种基于JSON的开放标准,用于在各方之间安全传输信息。它由三部分组成:Header、Payload和Signature。其中,Header用于描述JWT的元数据,Payload用于存储实际传输的数据,Signature用于验证JWT的合法性。在使用JWT进行身份验证时,服务器会生成一个JWT并发送给客户端,客户端将其保存起来。之后,客户端发送请求时,会将JWT作为请求头信息的一部分发送给服务器,服务器根据JWT验证用户身份的合法性。 总结:SessionCookieToken和JWT都是常用于身份验证和会话管理的方法,它们各有优劣和适用场景。SessionCookie依赖于服务器端存储用户状态,而Token和JWT则可以减轻服务器的负担,并且适用于分布式系统。其中,JWT由于其自包含性和可扩展性,在分布式系统和前后端分离的架构中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值