登录认证-登录校验-会话技术方案选择和对比(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 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。


相关文章
|
27天前
|
数据采集 存储 Web App开发
如何避免爬虫因Cookie过期导致登录失效
如何避免爬虫因Cookie过期导致登录失效
|
1月前
|
JSON 安全 Java
什么是用于REST API的JWT Bearer令牌以及如何通过代码和工具进行调试
在Web开发中,保护REST API至关重要,而JSON Web令牌(JWT)特别是JWT Bearer令牌,是一种高效方法。它通过紧凑、自包含的结构实现安全信息交换,提升用户体验。本文探讨JWT Bearer的基本概念、结构与实现,包括在Java中的应用步骤,以及使用Apipost和cURL进行测试的方法。JWT优势明显:无状态、互操作性强,适用于分布式系统。掌握JWT Bearer,可助开发者构建更安全、高效的API解决方案。
|
5月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
129 11
|
7月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
242 57
|
6月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
157 4
|
7月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
505 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
6月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
8月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
7月前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
409 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
8月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
259 1