登录令牌探究(cookie)

登录令牌探究(cookie)

2db9fbc3e04de8bcf5bbd95f05261d8c

Session

定义:Session 是服务器端用于保存用户会话状态的数据结构。在用户登录时,服务器为其创建一个 Session,并生成一个唯一的 Session ID 来标识该会话。

1
2
3
   HttpSession session = req.getSession();
session.setAttribute("session_account", "1");
服务器

客户端拿到的是一段令牌-后续传递到服务端-服务端会解密-

存储位置服务器端。服务器保存每个用户的 Session 数据,客户端通过 Session ID 与服务器通信。

特点

  • 有状态:服务器必须存储 Session 数据,因此这种方式需要服务器管理用户的会话信息。
  • Session ID 传递服务器在用户登录时生成 Session ID 并发送给客户端,客户端通常通过 Cookie 来存储 Session ID,并在每次请求时自动发送给服务器。
  • 安全性:由于 Session ID 存储在 Cookie 中,结合 Cookie 的安全设置(如 HttpOnlySecure)可以提升安全性,但 Session 本身依赖服务器存储和管理。
  • 应用场景:传统 Web 应用中会话管理最常用的方式,尤其适合需要维护状态的应用。

定义:Cookie 是存储在客户端的小型数据文件,通常由服务器生成,用于在客户端和服务器之间传递信息,最常用于保存会话信息、用户偏好等。

存储位置:客户端(浏览器)中,客户端每次发起请求时会自动将与请求域相关的 Cookie 发送给服务器。

会话管理:Cookie 可以存储用户的 Session ID 等信息,用于维持用户的会话状态。

大小限制:单个 Cookie 的大小通常限制为 4KB。

安全性:Cookie 可以设置 HttpOnly(防止客户端 JavaScript 访问)、Secure(仅通过 HTTPS 传输)等安全属性。

自动发送:浏览器会在每次请求时自动携带 Cookie,无需客户端手动干预。

应用场景:主要用于会话管理和状态维护,常用于 Web 应用的用户登录状态保持。

1
2
3
4
if (Objects.nonNull(r.getData())) {
Cookie cookie = new Cookie("username", (String) r.getData());
resp.addCookie(cookie);
}

session再探究

工作流程

当用户登录应用时,服务器为该用户创建一个 Session 并生成一个唯一的 Session ID

Session ID 通常是一个随机生成的字符串,用于唯一标识该用户的会话。

服务器将 Session ID 和会话数据(如用户信息、权限等)存储在服务器的内存或数据库中。

服务器通过 HTTP 响应将 Session ID 发送给客户端,客户端通常会将这个 Session ID 保存在 Cookie 中。

在随后的每个请求中,客户端会将 Session ID 通过 Cookie 自动发送给服务器。

服务器接收到请求时,通过查询存储的 Session ID 来获取对应的会话数据,从而确定用户的身份。

session数据查找

image-20241004234535358

接收请求:客户端通过 Cookie 发送 Session ID 给服务器。

查询服务器存储:服务器在内部的 Session 存储中查找该 Session ID 是否存在。

获取会话数据:如果找到匹配的 Session ID,服务器会返回对应的会话数据(如用户身份、权限等)。

处理请求:服务器根据会话数据执行相应的操作。

会话劫持问题

如果另一个人获得了有效的 Session ID,他确实可以伪装成该用户登录到系统。因为 Session ID 本质上是唯一标识用户会话的凭证,获得 Session ID 的人可以在没有输入用户名和密码的情况下发送请求,服务器会认为他们是合法的用户。这种攻击通常被称为 Session Hijacking(会话劫持)

当服务器重启后session就失效-可以考虑redis实现

IDEA 关闭服务器后,Session 会失效。但你可以通过使用外部存储(如 Redis、数据库)或配置服务器的持久化机制,来保留 Session 数据


登录令牌探究(cookie)
http://example.com/2024/10/04/skill/Jwtcookieseiion/
作者
John Doe
发布于
2024年10月4日
许可协议