学习笔记——后端项目中的相关技术 【随时更新】

news2024/11/22 19:53:01

文章目录

  • 1. Session 共享
    • 1.0 cookie和session的工作流
    • 1.1 Cookie范围
    • 1.2 为什么要共享?
    • 1.3 如何共享存储
    • 1.4 session共享实现

1. Session 共享

1.0 cookie和session的工作流

在 Web 开发中,Cookie 和 Session 是非常常见的,尤其是在处理用户身份验证、会话管理等方面。

  • 用户提交登录请求:
    用户通过登录页面提交用户名和密码。

  • 服务器验证用户信息:
    服务器接收到登录请求后,验证用户提供的用户名和密码是否正确。

  • 创建 Session:
    如果验证通过,服务器生成一个唯一的 Session ID,并在服务器端创建一个 Session 来存储用户的相关信息(如用户 ID、用户名、权限等)。

    服务器将这个 Session ID 存储在 Session 对象中,并设置一个过期时间。

  • 发送 Session ID 到客户端:
    服务器通过响应头,在响应头中设置 Set-Cookie,Set-cookie中包含了 Session ID。

  • 浏览器发送请求:
    客户端收到响应后,如果服务器给了Set-cookie,当用户在登录后访问其他页面时,浏览器会自动将包含 Session ID 的 Cookie 附加到每个 HTTP 请求中。

  • 服务器验证 Session:
    服务器接收到请求后,会检查请求中的 Cookie,提取出 Session ID。
    服务器使用这个 Session ID 查找对应的 Session,以确定该用户的身份,并获取相关的用户数据。

1.1 Cookie范围

  • Cookie存储在客户端且不可跨域。

  • 种session的时候注意范围,可以在配置的cookie.domain进行设置
    如果要共享cookie,可以种一个更高层的公共域名。

  • 比如,前端localhost:3000访问,分配cookie;后4000访问,又重新分配cookie。设置成更高的公共域名localhost之后,4000、5000等再访问的时候,不用重新给分配cookie了。

server:
  port: 8080
  servlet:
    context-path: /api
    session:
      cookie:
        domain: localhost

1.2 为什么要共享?

  • 为什么服务器A登陆后,请求发到服务器B,B不认识该用户?

    原因:请求发到服务器A上,session(用户登录信息)存在A的内存中。
    此时B的内存没有该用户的sessionID,因此不认识该用户。
    在这里插入图片描述

    解决方案:共享存储,把session存储到A和B都能读取到的中间件中,可以使用redis、mysql、文件服务器ceph等;而不是把数据放到单台服务器的内存中。
    在这里插入图片描述

1.3 如何共享存储

核心思想:把数据放到同一个地方集中管理。

  1. Redis。用户信息读取 / 是否登录的判断及其频繁,Redis是基于内存的键值存储系统,读写性能很高,简单的数据单机qps能达到5w-10w。
  2. MySQL
  3. 文件服务器,如ceph

1.4 session共享实现

redis的云上装载参考:Java相关工具/插件的安装教程汇总

  1. 引入redis → 能够操作redis。
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
   <version>2.6.4</version>
</dependency>

redis管理工具:quick redis,能看到存进来的session信息等。

  1. 引入spring-session 和 redis 的整合,使得自动将session存储到redis中。
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.6.3</version>
</dependency>
  1. 修改spring-session存储配置,改application.yml的配置。
    原来session只设置了timeout过期时间,现在要加一个store-type。
    spring.session.store-type默认是none,表示存储在服务器
    设置成:store-type:redis 表示从 redis 读写 session
Spring:
  session:
    timeout: 86400
    store-type: redis

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

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

相关文章

使用 Java 在 Android 平台上通过 socket 实现进程间通信

引言 Socket是位于应用层和传输层之间的一个抽象层&#xff0c;把TCP/IP层复杂的操作抽象为几个简单的接口&#xff0c;供应用层调用以实现进程在网络中通信。 Socket分为流式套接字和数据包套接字&#xff0c;分别对应网络传输控制层的TCP协议和UDP协议。TCP协议是一种面向连…

Qt之界面优化

目录 前言 QSS基础知识 选择器 样式属性 控件样式⽰例 绘图 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 前言 Qt 仿照CSS的模式,引⼊了QSS,来对Qt中的控件做出样式上的设定,从⽽允许程序猿写出界⾯更好看 的代码.当然,由于Q…

【面试题系列Vue05】跟其他人不太一样的 Vue生命周期总结

既然要讲 生命周期&#xff0c;那渲染过程得先了解下。 数据绑定 Vue 文本插值 在 Vue 中&#xff0c;最基础的模板语法是数据绑定&#xff0c;例如&#xff1a; <div>{{ data }}</div>这里绑定了一个 msg 的变量&#xff0c;开发者在 Vue 实例 data 中绑定该变…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第四章 卷积神经网络卷积神经网络构成一个通俗的例子 第四章 卷积神经网络 这部分看书的时候感觉云里雾里的&#xff0c;好在之前学过一些卷积神经网络、全链接、感受野的概念&#xff0c;我就用自己的理解阐述一篇笔记吧&…

idea插件开发(一)合并检查

一、引言 由于代码合并冲突的时候&#xff0c;代码丢失的情况频发&#xff0c;作者研究idea的VFS虚拟文件系统和Git4ide源码&#xff0c;创作idea插件检测代码合并丢失 可以区分主动删除与被动丢失&#xff0c;比如本地或者删除一段代码&#xff0c;合并之后不会被认为是丢失…

华为云 x 容联云|828企业节,助推中国数智产业实力再升级

2024年8月27日&#xff0c;华为第三届828 B2B企业节在2024中国国际大数据产业博览会上正式开幕。 828 B2B企业节是全国首个基于数字化赋能的企业节&#xff0c;由华为联合上万家生态伙伴共同发起&#xff0c;旨在为广大企业尤其是中小企业搭建数字化创新发展平台&#xff0c;融…

C语言基础(二十二)

在C语言中&#xff0c;对链表进行排序涉及到比较链表中的节点值&#xff0c;并根据比较结果重新排列这些节点。由于链表是非连续存储的数据结构&#xff0c;其排序比数组排序要复杂一些。由链表的结构特性可知&#xff0c;插入排序和归并排序更适合链表排序。 测试代码1&#…

力扣之1853.转换日期格式

文章目录 1. 1853.转换日期格式1.1 题干1.2 建表1.3 题解1.4 实现方式1.5 题解1.6 知识总结 1. 1853.转换日期格式 1.1 题干 表: Days ----------------- | Column Name | Type | ----------------- | day | date | ----------------- day 是这个表的主键。 给定一个Days表&…

基于Spring Boot的陶瓷文化网站的设计与实现

毕业设计&#xff08;论文&#xff09; 论文题目&#xff1a;基于Spring Boot的陶瓷文化网站的设计与实现 博主可接毕设论文&#xff01;&#xff01;&#xff01; 摘 要 中国悠久的陶瓷艺术&#xff0c;作为民族文化遗产的重要载体&#xff0c;历经时代的洗礼&#xff0c;其…

kube-scheduler组件的启动流程与源码走读

概述 摘要&#xff1a;kube-scheduler是kubernetes系统中的重要组件&#xff0c;kub-scheduler 的核心职责是为待调度的 pod 寻找一个最合适的 node 节点, 然后进行 bind node 绑定, 后面 kubelet 才会监听到并创建真正的 pod。kub-scheduler本身是一个功能强大且负责的核心组…

使用Axure打造智慧场景下的数据可视化大屏原型

在数字化转型的浪潮中&#xff0c;数据可视化大屏以其直观、动态、高效的特性&#xff0c;成为了智慧社区、智慧城市、智慧工厂、智慧园区等各个领域不可或缺的展示窗口。作为专业的原型设计软件&#xff0c;Axure不仅以其强大的交互设计能力著称&#xff0c;更在数据可视化大屏…

线段树小例题——结合前后缀获得结果

和我今天上午写的那个前后缀太像了&#xff0c;不能说一模一样&#xff0c;但是至少我觉得思路是真的一点没变 上一道题的链接&#xff1a;http://t.csdnimg.cn/pXBnU P4513 小白逛公园 题意&#xff1a;有n个点&#xff0c;每个点都有一个初值&#xff0c;然后有m个操作&am…

SQL慢查询优化方式

目录 一、SQL语句优化 1. 避免使用 SELECT * &#xff0c;而是具体字段 2.避免使用 % 开头的 LIKE 的查询 3.避免使用子查询&#xff0c;使用JOIN 4.使用EXISTS代替IN 5.使用LIMIT 1优化查询 6.使用批量插入、优化INSERT操作 7.其他方式 二、SQL索引优化 1.在查询条件…

Java异常详解(全文干货)

介绍 Throwable Throwable 是 Java 语言中所有错误与异常的超类。 Throwable 包含两个子类&#xff1a;Error&#xff08;错误&#xff09;和 Exception&#xff08;异常&#xff09;&#xff0c;它们通常用于指示发生了异常情况。 Throwable 包含了其线程创建时线程执行堆栈…

分库分表学习笔记(二)

分库分表学习笔记&#xff08;一&#xff09;-CSDN博客 分表分库规则 图源&#xff08;https://zhuanlan.zhihu.com/p/535713197&#xff09; 水平分表 水平分表一般是我们数据库的数据太多了&#xff0c;原大众点评的订单单表早就已经突破两百G。 数据量太多的影响 1. 查询…

linux dma cache和主存数据不一致问题

1、问题原因 根本原因是cache和dma的目的地址存在重叠。 如果DMA的目的地址与Cache所缓存的内存地址访问有重叠&#xff08;如上图所示&#xff09; &#xff0c; 经过DMA操作&#xff0c; 与Cache缓存对应的内存中的数据已经被修改&#xff0c; 而CPU本身并不知道&#xff0c…

VScode开发ESP32

以下是所有的功能 先选择串口&#xff0c;再选择编译&#xff0c;然后再烧录

2023年最新自适应主题懒人网址导航v3.9php源码

源码简介 这个懒人网址导航源码是一个基于PHPMySQL开发的网址导航系统。该版本是在原有3.8版本的基础上进行了修复和功能增强。我们建议新用户直接使用这个最新版本&#xff0c;放弃旧版本。如果你有二次开发的能力&#xff0c;可以根据更新日志自行进行升级。我们将在后期继续…

论文阅读笔记:RepViT: Revisiting Mobile CNN From Vit Perspective

文章目录 RepViT: Revisiting Mobile CNN From Vit Perspective动机现状问题 贡献实现Block设置独立的token融合器和通道融合器减少膨胀并增加宽度 宏观设计stem的早期卷积简单分类器整体阶段比率 微观设计内核大小选择Squeeze-and-excitation层放置网络架构 实验ImageNet-1K上…

idea import配置

简介 本文记录idea中import相关配置&#xff1a;自动导入依赖、自动删除无用依赖、避免自动导入*包 自动导入依赖 在编辑代码时&#xff0c;当只有一个具有匹配名称的可导入声明时&#xff0c;会自动添加导入 File -> Settings -> Editor -> General -> Auto Imp…