Cookies Session JWT

news2025/9/19 2:28:16

Cookies

Cookies是会话跟踪技术的一种,通过将数据保存到客户端的浏览器上以此来达到会话间共享数据的效果。

从打开浏览器开始访问页面直到关闭浏览器断开连接算作一次会话(Session),一次会话中可以包含多次请求-响应。每次的请求响应都是无状态的,意味着服务器不能通过这一次请求得道上一次请求发生了什么。

Cookies实现原理:

  1. 浏览器向服务器发送请求->服务器响应请求(携带set-cookies响应头)
    在这里插入图片描述
    2.浏览器再次向服务器发送请求时,会在请求头携带当前浏览器的cookies信息。
    在这里插入图片描述

Cookies优缺点:

优点:HTTP协议默认支持
缺点:1.不能进行跨域 2.Cookies始终为不安全的数据,用户可以禁用Cookies 3.移动端不可用

跨域:域名、IP、端口号只要有一个不同的链接就算跨域。

java实现

通过HttpServletResponse、HttpServletRequest获取响应/请求信息,在响应信息中设立cookies,在请求信息中获取浏览器所有的cookies。

@RestController
public class SessionController {
    @GetMapping("/setCookies")
    public String setCookies(HttpServletResponse response){
        response.addCookie(new Cookie("name","yi"));
        return "ok";
    }
    @GetMapping("/getCookies")
    public String getCookies(HttpServletRequest request){

        Cookie[] cookies = request.getCookies();
        for(Cookie cookie:cookies){
            System.out.println(cookie.getName()+":"+cookie.getValue());
        }
        return "ok";
    }
}

Session

在这里插入图片描述
Session是基于Cookies实现的,也是一种会话追踪技术。
Session与Cookies的不同在于Session是将信息存储在服务器上形成Session对象而不是浏览器中。

Session原理:

  1. 浏览器向服务器发送第一次请求时,服务器会生成一个独一无二的Session对象,并将Session对象的ID通过设置Cookies的方式响应给浏览器,这样下一次浏览器请求时便会携带含有SessionID的cookies信息。
    在这里插入图片描述

  2. 浏览器进行第二次请求时,服务器通过请求中携带的SessionID就可以找到相对应的Session对象,从而得知这次会话中存储了什么信息。
    在这里插入图片描述

Session优缺点:

优点:存储在服务端,数据较为安全
缺点:1.服务器集群下无法使用, 2.基于Cookies所以含有Cookies所有的缺点。

java实现:

当参数为HttpSession时,程序会自动判断当前请求是否有对应的会话对象,如果没有则新建一个HttpSession对象,并在响应头中加入set-cookies:SessionId…
getSession与getSession2等价,可以从HttpServletRequest中获取Session对象。

@GetMapping("/setSession")
    public String setSession(HttpSession session){
        System.out.println(session.hashCode());
        session.setAttribute("name","li");
        return "OK";
    }

    @GetMapping("/getSession")
    public String getSession(HttpSession session){
        System.out.println(session.hashCode());
        System.out.println(session.getAttribute("name"));
        return "OK";
    }
    @GetMapping("/getSession2")
    public String getSession2(HttpServletRequest request){
        HttpSession session = request.getSession();
        System.out.println(session.hashCode());
        System.out.println(session.getAttribute("name"));
        return "OK";
    }

JWT令牌技术(Json Web Token)

客户端浏览器在第一次请求时(如登录成功),服务器生成一个令牌(一个字符串),通过响应返回给浏览器。浏览器可以将收到的令牌存储在任何位置。
在之后的每一次请求中携带该令牌,服务器会对请求中的令牌进行校验,从而返回对应的结果。
在这里插入图片描述

JWT组成格式:

第一部分:Header(头),记录令牌类型、签名算法
第二部分:Payload(有效载荷),携带自定义信息。里面的消息术语称为Claims
第三部分:Signature(签名),融合header、payload并加入指定秘钥,通过签名算法计算而来
在这里插入图片描述

优缺点:

优点:支持PC移动端、解决集群环境认证问题、减轻服务端存储压力、
缺点:需要自己实现

java实现:

  1. 引入maven依赖
		<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.2</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.2</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-gson</artifactId>
            <version>0.11.2</version>
        </dependency>

//随便写的秘钥
  String secret="4wAJAxLrSdtgJC8G2jsC/IcJMPfAp+a3IHJBYZkufYCQdh2Afk1TeHRgSwX/fEXHBGaP8mftoUiSd22G93GJ5A==";
	//生成JWT String,通过claims参数传入有效载荷
    public String GenJWT(Map<String,Object> claims){

        String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, secret)//签名算法秘钥
                .setClaims(claims)//指定有效载荷(自定义数据)
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//1小时过期
                .compact();
        return jwt;
    }

    public void ParseJWT(String jwt) {
        try {
            Claims body = Jwts.parser()
                    .setSigningKey(secret) //设置秘钥
                    .parseClaimsJws(jwt)  //填写要解析的jwt
                    .getBody();           //获得自定义数据
            System.out.println(body);
            System.out.println("解析成功");
        } catch (Exception e){
            System.out.println("解析失败,被篡改");
        }
    }
    @Test
    public void testJWT() throws InterruptedException {
        HashMap<String, Object> claims = new HashMap<>();
        claims.put("name","li");
        String jwt= GenJWT(claims);

        System.out.println(jwt);
        ParseJWT(jwt);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux】权限相关问题

【linux】权限相关问题 一.用户的分类sudo 二.文件执行的权限i. 文件的分类ii.人的分类三.修改创建文件的权限chmod更改文件创造的默认权限(umask) 三.删除&#xff08;粘滞位&#xff09; 一.用户的分类 在我们使用linux的时候&#xff0c;有用户类型的区分&#xff0c;不同用…

Linux环境下Qt应用程序打包与发布

本文介绍Linux环境下Qt应用程序的打包与发布。 Linux环境下&#xff0c;在开发机器上开发完应用程序&#xff0c;需要部署到其他非开发环境的机器上&#xff0c;这时&#xff0c;需要对开发的Qt应用程序进行打包&#xff0c;以确保可以在其他机器平台&#xff08;非开发环境&a…

20231012_python练习_服务端与客户端数据交互v2_增加xlsx表格数据批量导入数据库

服务端增加根据上传附件格式 xlsx 类型&#xff0c;将表格第一个sheet数据批量快速导入数据库 服务端 import socketserver import json import os #import pymysql import cx_Oracle #Oracle 数据库连接 import time import tqdm import pandas as pd import openpyxlclass …

Linux---(二)基本认识与安装

文章目录 前言一、操作系统的概念、定位二、使用XShell远程登录Linux1.下载安装XShell2.查看 Linux 主机 ip3.使用XShell登录主机4.XShell 下的复制粘贴 前言 一、操作系统的概念、定位 1.操作系统是一款进行软硬件资源管理的软件 硬件资源管理&#xff1a;将CPU、键盘、显示…

uni-app:本地缓存的使用

uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法&#xff1a; uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中&#xff0c;可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…

Leetcode: 931.下降路径最小和(动态规划)

1. 题目解析 LeetCode链接 根据题目可以得出&#xff0c;当处于 [i][j] 位置时只能从 [i - 1][j - 1]&#xff0c;[i - 1][j]&#xff0c;[i - 1][j 1] 这三个位置到达&#xff0c; 所以我们想要得到当前最小的路径和只需要得到上述三个位置的最小值加上该位置的值即可。 2…

Redis(五)

文章目录 一、Redis键值设计&#xff08;一&#xff09;key结构设计&#xff08;二&#xff09;拒绝BigKey什么是BigKey&#xff1f;BigKey的危害如何发现BigKey &#xff08;一&#xff09;恰当的数据类型 二、批处理优化三、服务端优化四、集群最佳实践 一、Redis键值设计 &…

区块链技术在供应链管理中的创新应用

区块链技术以其独特的不可篡改和透明性特点&#xff0c;正在逐步改变供应链管理的传统模式。本文将探讨区块链技术在供应链管理中的创新应用及其带来的效益。 区块链技术的出现为许多行业带来了创新的可能&#xff0c;其中之一就是供应链管理。通过区块链技术&#xff0c;企业可…

记录项目运行起来后在项目的控制台,直接展示抽中奖品的弹框

首先运行项目或者打开线上项目, 在控制台或者项目代码中找到调用出这个弹框的方法, 在控制台直接vm.这个方法() 来调用 可以看到弹框出来了

MyBatis基础之注解与SQL 语句构建器

文章目录 注解实现简单增删改查SQL 语句构建器SelectProvider举例 注解实现简单增删改查 在 MyBatis 的核心配置文件中&#xff0c;你需要配置的不是 mapper 映射文件&#xff0c;而是 Mapper 接口所在的包路径。 <!-- 在配置文件中 关联包下的 接口类--> <mappers&…

【STM32单片机】宠物定时喂食器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、IIC OLED液晶、蜂鸣器、继电器投喂控制等。 主要功能&#xff1a; 系统运行后&#xff0c;OLED液晶显示初始时间&#xff0c;默认工作在自动投…

核心概念:从晶体管到集成电路到摩尔定律

目录 晶体管 集成电路 摩尔定律 总结 这芯片和半导体是不是一回事儿呢&#xff1f;怎么我有时候听人说芯片行业&#xff0c;有时候又听人说半导体行业&#xff0c;好像他们说的都是一回事&#xff1f; 不知道你是不是也有这样的问题。其实啊&#xff0c;这问题很简单&…

arm实验

设置按键中断&#xff0c;按键1按下&#xff0c;LED亮&#xff0c;再次按下&#xff0c;灭 按键2按下&#xff0c;蜂鸣器叫&#xff0c;再次按下&#xff0c;停 按键3按下&#xff0c;风扇转&#xff0c;再次按下&#xff0c;停 头文件 #ifndef __CTRL_KEY_H__ #define __CT…

python 操作FT232H——(1)准备工作与IO输出方波信号

1.准备工作&#xff1a; python环境&#xff1a; 安装python 环境&#xff0c;我目前使用的是pycharm2023.2.1 community Edition 版本 需要注意设置python解释器的版本及关联本地库&#xff0c;这样就不需要在新的工程中安装库文件了&#xff0c;&#xff08;当然也有缺点&…

Activity页面不显示toolbar

页面显示如下&#xff0c;显示toolbar, 想实现不显示toolbar&#xff0c; 1、在manifest里设置 android:theme"style/AppThemeNoTitle"&#xff0c;可以隐藏&#xff0c;但是整个页面显示为透明的了&#xff0c;activity整体类型发生改变 2、或者设置这个&#xf…

如何逐步掌握STM32开发技巧?

第一步&#xff1a;建立开发环境 选择Keil MDK等开发环境&#xff0c;根据芯片型号安装相应库。 第二步&#xff1a;备齐开发板和资料 选择最小系统板&#xff0c;可自行搭建外围电路&#xff0c;更深入了解硬件。 第三步&#xff1a;了解STM32 观看视频教程&#xff0c;快速…

03 独立看门狗 hal库 stm32cubemx

1.设置配置参数 > 2.初始化 IWDG_HandleTypeDef hiwdg;/* IWDG init function */ void MX_IWDG_Init(void) //Tout((42^prer) rlr) /40 // IWDG_PRESCALER_8 (42^prer) 8/40 *5*2000 64/40 *4095 ---6s {/* USER CODE BEGIN IWDG_Init 0 *//* USER CODE END IWDG_…

python-arima模型statsmodels库实现-有数据集(续)-statsmodels-0.9.0版本

python-arima模型statsmodels库实现-有数据集&#xff08;续&#xff09; 这篇博客是上一篇python-arima模型statsmodels库实现的续集&#xff0c;上一篇采用的statsmodels版本应该要高一点&#xff0c;如果使用低版本的statsmodels代码会有bug&#xff0c;这一篇则是针对stat…

docker制作自定义版本的jdk镜像

1、下载jdk版本&#xff0c;这里以jdk1.8.0_381为例 Java Downloads | Oracle 2、创建Dockerfile文件 此操作在安装有docker环境的centos系统下操作&#xff0c;如果没有安装请参考此文章&#xff1a;http://t.csdnimg.cn/NCCRB vim Dockerfile From debian MAINTAINER "…

Arya小科普 | 硬件软件基础知识 Java语言的前世今生 James Gosling老爷子的小故事 Java下载 和 IDEA工具

前言 1.从硬件到软件的计算机基础知识&#xff1b; 2.Java之父的小故事&#xff1b; 3.Java语言的前世今生&#xff0c;及其特点&#xff1b; 4.Java下载 和 IDEA工具&#xff1b; 硬件和软件 键盘就是硬件&#xff0c; 操作系统就是软件。 硬件&#xff1a;设备和计算机打交…