cookie、session、token学习笔记

一.cookie

1.什么是cookie?

Cookie用于存储web页面的用户信息。

Cookie是一些数据,存储于你电脑的文本文件中。

当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。

而Cookie的作用就是用于解决“如何记录客户端的用户信息”:

当用户访问web页面时,他的名字可以记录在cookie中。
在用户下一次访问该页面时,可以在cookie中读取用户访问记录。
当浏览器从服务器上请求web页面时,属于该页面的cookie会被添加到该请求中。服务端通过这种方式来获取用户的信息。

2.cookie属性

属性名称属性含义
namecookie 的名称
valuecookie 的值
commentcookie 的描述信息
domain可以访问该 cookie 的域名
expirescookie 的过期时间,具体某一时间
maxAgecookie 的过期时间,比如多少秒后 cookie 过期
pathcookie 的使用路径
securecookie 是否使用安全协议传输,比如 SSL 等
versioncookie 使用的版本号
isHttpOnly指定该 Cookie 无法通过 JavaScript 脚本拿到,比如 Document.cookie 属性、XMLHttpRequest 对象和 Request API 都拿不到该属性。这样就防止了该 Cookie 被脚本读到,只有浏览器发出 HTTP 请求时,才会带上该 Cookie。

3.cookie举例

132501dc740d4e23a0029909bcf53e77.png

上图可分为以下几步:

1.客户端发送请求到服务端(比如登录请求)。
2.服务端收到请求后生成一个 session 会话。
3.服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。
4.客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。
5.客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户信息等。
6.服务端接收到请求,验证 cookie 信息,比如通过 sessionId 来判断是否存在会话,存在则正常响应。

二.session

1.什么是session

session 由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含 sessionId 标识,如果包含了 sessionId,则代表服务端已经和客户端创建过 session,然后就通过这个 sessionId 去查找真正的 session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session 对应,然后在响应的时候将 sessionId 给客户端,通常是存储在 cookie 中。如果在请求中找到了真正的 session,验证通过,正常处理该请求。

总之每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将 session 的唯一标识 sessionId 通过设置 Set-Cookie 头的方式响应给客户端,客户端将 sessionId 存到 cookie 中。

通常情况下,我们 cookie 和 session 都是结合着来用,当然你也可以单独只使用 cookie 或者单独只使用 session

下面为session简单示意图:

ed3b0c79b855404387549e9609ea6d24.png

2.常用API(应用程序接口)

名称作用
getId()得到sessionId
invalidate()让session立刻失效
getAttribute(String key)根据key获取该session中的value
setAttribute(String key,Object value)往session中存放key-value
removeAttribute(Stringkey)根据key删除session中的key-value
getServletContext()得到ServletContext
setMaxInactiveInterval(long timeout)/getMaxInactiveInterval设置/获取session的最大有效时间
getCreationTime获取session的创建的时间
getLastAccessedTime获取session最后一次访问的时间
getSession()从HttpServletRequest中获取session

3.session与cookie的区别

1).保存的位置不同
cookie保存在浏览器端,session保存在服务端。
2).使用方式不同
cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。
session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器,可以将其放到cookie中,进行传输,如果浏览器不支持cookie,则应该将其通过encodeURL(sessionID)进行调用,然后放到url中。
3).存储内容不同:cookie只能存储字符串,而session存储结构类似于hashtable的结构,可以存放任何类型。
4).存储大小:``cookie最多可以存放4k大小的内容,session则没有限制。
5).session的安全性要高于cooKie
6).cookie的session的应用场景:cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录
session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息。
7).session和cookie的弊端:cookie的大小受限制,cookie不安全,如果用户禁用cookie则无法使用cookie。如果过多的依赖session,当很多用户同时登陆的时候,此时服务器压力过大。sessionId存放在cookie中,此时如果对于一些浏览器不支持cookie,此时还需要改写代码,将sessionID放到url中,也是不安全。

三.token

1.什么是token?

token是“令牌”的意思。它不像cookie和session一样是一种web规范,而是服务端生成的一串字符串,以作客户端进行请求的一个标识。当第一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

2.token有什么用?

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用。

使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。

大概的流程:

1).客户端使用用户名和密码请求登录。

2).服务端收到请求,验证用户名和密码。

3).验证成功后,服务端会生成一个token,然后把这个token发送给客户端。

4).客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。

5).客户端每次向服务端发送请求的时候都需要带上服务端发给的token。

6).服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

token还有防止爆破的作用,比如我之前打过的pikachu(皮卡丘)靶场的第一大关,详见我之前写过的pikachu靶场通关系列博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CookieSession Token 在 Web 应用中都被用来跟踪用户状态。两者的主要区别在于,Cookie 是存储在用户设备上的,而 Session Token 则是存储在服务器端的。 Cookie 是由浏览器自动创建和发送给服务器的,用户可以在浏览器的设置中查看和管理它们。Cookie 中可以存储一些键值对数据,在用户的不同请求之间共享数据。Cookie 适用于存储一些简单的数据,例如用户名和密码等。 Session Token 是在用户登录时在服务器端创建,并在用户与服务器进行交互时发送。服务器端会为每个用户维护一个唯一的 Session TokenSession Token 是在服务器端存储的,用户可以在浏览器中查看,但不能编辑或删除。Session Token 适用于存储用户身份,例如权限、购物车等。 总结,Cookie主要用来存储简单的,不太敏感的数据,且存在浏览器端;而Session token用来标识用户身份,数据都是存在服务器端。 ### 回答2: cookiesessiontoken都是现在常见的认证方式,用于保证Web应用程序的安全性和隐私性。在理解三者的区别之前,需要先了解它们的基本概念含义。 1. Cookie Cookie服务器发送给浏览器的小型数据文件,存储在用户的计算机中。浏览器在之后的请求中会将此文件发送到服务器,以便于验证用户的身份和记录用户的行为。 Cookie 的优点在于它可以存储比 Session 更多的信息,并且可以在浏览器关闭后仍然保持数据有效。缺点是 Cookie 可以被恶意软件或黑客轻易窃取。 2. Session Session 指的是服务器创建的一个会话过程,用于在特定时间段内记录某个用户的交互状态。通过 Session,Web应用程序可以在不同的页面之间共享数据,为用户提供个性化服务。 Session 的优点在于它存储在服务器上,保障了比 Cookie 更好的安全性和隐私性。但是, Session 也会消耗服务器的资源,因此需要谨慎管理。 3. Token Token 是一种随机生成的字符串,用于验证用户的身份和权限。在 Web 应用程序中,Token 可以被用来替代 CookieSession,因为它不会存储在用户的计算机中,也不需要服务器存储用户的状态。 Token 的优点在于它们相对更安全,因为它们没有任何销售性的信息存储在用户的浏览器中。另外, Token 机制可以支持无状态应用,也就是应用程序无需保存任何会话信息,更好的支持了分布式架构。 在以上区别基础上,三者的区别主要在于存储地点(客户端或服务器端)、存储内容(数据信息)、安全性和使用场景等。 - Cookie主要存储在客户端,并可以将更多的数据存储在客户端,Session存储于服务端提供了更好的安全性,但会占用更多服务器资源,Token能够将Session信息存储于客户端,也可以保证数据安全。 - Cookie主要用于客户端与服务端的交互;Session更注重用户身份的鉴别与用户状态的维护;Token更多地用于 API 认证。 - 一般情况下Cookie的安全性最低,Session的安全性中等,Token相对而言较为安全。 - 通常情况下,Token方式的应用程序可以跨平台、跨域和分布式部署,更加灵活多变。 综上所述,Cookiesessiontoken都是Web开发中常用的验证方式,它们在存储及应用方式上均有所差别。仔细分析自身需求,选择最适合的认证方式相比盲目跟随更为优合理。 ### 回答3: CookieSessionToken都是web应用中常见的身份认证和信息存储方式,它们之间最大的不同在于其存储的位置和方式。 Cookie是由服务器在浏览器中生成的,并存储在浏览器中的文件中。当浏览器向服务器发出请求时,会自动通过Cookie中的信息向服务器证明身份。Cookie在用户登录后会保存用户名、密码和一些其他信息,以便下次登录时自动填充,从而提高用户体验。 Session是一个服务器端的解决方案,它可以在服务器端存储用户的会话信息,并且在用户进行请求时将信息传输到客户端。Session的实现依赖于Cookie服务器通过发送一个包含Session ID的Cookie,来记录用户的会话信息,服务器则将Session信息保存在服务器端的内存或者文件系统中,以确保用户信息的安全性。 Token是一种无状态的身份认证方式,它不同于CookieSession的保存信息方式,而是保存在客户端中。当用户登录时,服务器会生成一个Token并将其返回给客户端,客户端在后续的请求中会带上这个Token服务器会通过验证Token的合法性来判断用户的身份。 总的来说,Cookie是一种简单且易用的Web身份认证方式,Session需要服务器支持,可以更好的保证用户信息的安全性,Token则更适合Web接口/移动端API身份认证。不同的应用场景可以选择适合的认证方式,以确保用户信息和身份的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值