登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)

简介: 登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)

一、背景说明

在开发登录功能时,难以避免的会面临选择何种会话技术,来对用户的登录状态进行认证和校验。常见的三种方式包括:

  • cookie
  • session
  • JWT令牌

下面依次展开对这三种会话技术的优缺点进行说明。

二、会话技术之 Cookie

1、为什么说cookie是客户端会话技术

cookie是一种客户端会话技术,他是存储在浏览器的,那为什么说他是客户端会话技术呢?可以看以下代码来证明:

private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
    Cookie cookie = new Cookie(key, value);
    if (domain != null) {
      cookie.setDomain(domain);
    }
    cookie.setPath(path);
    cookie.setMaxAge(maxAge);
    cookie.setHttpOnly(isHttpOnly);
    response.addCookie(cookie);//直接响应给浏览器,没有存储在服务器端
  }

他是由服务器端,通过response对象直接响应给浏览器的,并没有存在服务器中。

下图就是服务器响应给客户端浏览器的cookie

2、cookie的优点和缺点

优点

  • 他是HTTP协议中支持的技术
  • 占用更少的内存,不需要任何服务器资源,并存储在用户的计算机上,因此不会给服务器带来额外的负担。

缺点

  • 移动端APP无法使用cookie
  • 不安全,用户可以自己禁用浏览器的cookie
  • cookie不能跨域

补充说明一下,跨域区分的三个维度:协议、域名/IP、端口

三、会话技术之 Session

1、为什么说Session是服务端会话技术

Session是一种服务端会话技术,他是存储在服务器上的,那为什么说他是服务器会话技术呢?可以看以下代码来证明:

public static String getValue(HttpServletRequest request, String key) {
    HttpSession session = request.getSession();
    session.setAttribute("login",key+"_"+ UUID.randomUUID());
    .......
  }

当客户端第一次请求服务器的时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象

下图是浏览器请求服务器端接口时,浏览器会把之前服务器端生成的sessionID,通过请求头带给服务器

2、session的优点和缺点

优点

  • 存储在服务器端,比较安全

缺点

  • 服务器集群环境下无法直接使用session

四、令牌技术JWT

1、JWT 的原理

服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。

{
“姓名”: “张三”,
“角色”: “管理员”,
“到期时间”: “2018年7月1日0点0分”
}

以后,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。

服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。

2、JWT的优点和缺点

优点

  • 支持pc端、移动端
  • 解决集群环境下的认证问题
  • 减去服务器端的存储压力

缺点

  • JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
  • JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。


相关文章
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
30天前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
48 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
2月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
3月前
|
数据安全/隐私保护
在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
该博客文章通过示例代码和运行结果截图,展示了网站登录过程中如何通过中间层页面使用cookies技术实现“记住用户名”功能,并在点击超链接后查看保存的用户名和密码信息。
在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
|
3月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
51 1
|
3月前
|
数据安全/隐私保护
|
3月前
|
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 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
212 0
|
3月前
|
Java 应用服务中间件 nginx
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
|
3月前
|
JSON Java API
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
|
4月前
|
JSON 数据安全/隐私保护 数据格式
用户登录权限校验 JWT【详解】
用户登录权限校验 JWT【详解】
102 1