Redis分布式Session和普通的cookie session有什么区别?
Redis 是一种高性能的缓存和 key-value 存储系统,常被用来实现分布式 Session 的方案。在这种方案中,用户的登录信息存储在 Redis 中,而不是存储在本地的 cookie 或 session 中。
当用户在集群中的不同节点之间切换时,通过读取 Redis 中的登录信息,各个节点可以实现登录态的同步。这种方式能够解决传统基于 cookie 和 session 的方案中,不同节点之间登录状态不同步的问题。此外,由于 Redis 的高可用和高性能,使得在分布式环境下,访问登录信息时速度更快,同时能够更好地应对高并发请求的情况。
配置简单,只需在yml中增加以下配置。
  #session失效时间
session:
  timeout: 86400
  store-type: redis
相比于传统的基于 cookie 和 session 的方案,使用 Redis 实现分布式 Session 有以下区别:
- 数据存储位置:普通的cookie session将数据存储在客户端浏览器中,而Redis分布式Session将数据存储在Redis服务器中。
- 可扩展性:Redis分布式Session可以方便地扩展应用程序,使得多个应用程序可以共享用户的Session数据,而普通的cookie session需要在每个应用程序上维护一份Session数据,难以扩展。
- 高性能:Redis 具有高性能的缓存机制,能够快速读写登录信息,保证在高并发场景下的用户体验。
- 可靠性:Redis分布式Session使用了Redis的高可用特性,可以提供更高的可靠性,而普通的cookie session在浏览器关闭或者清除Cookie的情况下会丢失Session数据。
- 跨平台性:由于 Redis 是基于网络的存储,能够跨平台地进行存储和读取登录信息,提高了应用的可移植性和扩展性。
- 安全性:Redis分布式Session可以使用更复杂的Session ID 算法,从而提高Session的安全性,而普通的cookie session则使用简单的Cookie值作为Session ID,容易受到伪造和攻击。
哈希算法:可以使用SHA-256或SHA-512等哈希算法生成唯一的Session ID。这些算法可以保证唯一性和不可预测性,并且比简单的随机数更难以猜测和伪造。另外,可以将一些与用户相关的信息,如用户ID、IP地址、时间戳等,作为哈希算法的输入,进一步增加Session ID的复杂度。
在Java中,我们可以使用哈希算法实现更复杂的Session ID算法。下面是一个使用SHA-256哈希算法生成Session ID的示例代码:
javaCopy code
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class SessionIdGenerator {
    public static String generateSessionId() {
        try {
            // 使用SHA-256算法生成MessageDigest实例
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
            // 生成16个随机字节作为Session ID的种子
            SecureRandom secureRandom = new SecureRandom();
            byte[] seed = secureRandom.generateSeed(16);
            // 将种子更新到MessageDigest中
            messageDigest.update(seed);
            // 对MessageDigest的摘要结果进行哈希计算
            byte[] digest = messageDigest.digest();
            // 将哈希结果转换为十六进制字符串作为Session ID
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < digest.length; i++) {
                sb.append(String.format("%02x", digest[i]));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            // 当指定的算法不存在时,抛出异常
            throw new RuntimeException("SHA-256 algorithm not found");
        }
    }
}
在这个示例代码中,我们使用SHA-256算法生成MessageDigest实例,并将16个随机字节作为Session ID的种子更新到MessageDigest中。然后对MessageDigest的摘要结果进行哈希计算,将哈希结果转换为十六进制字符串作为Session ID返回。
你可以在需要使用Session ID的地方调用generateSessionId()方法来生成Session ID。例如,在Java Web应用程序中,可以在用户登录时生成Session ID并将其存储在HttpSession中。
Redis分布式Session和普通的cookie session有什么区别?的更多相关文章
- 会话Cookie及session的关系(Cookie & Session)
		会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ... 
- redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题
		先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ... 
- 登陆验证系统实例-三种(cookie,session,auth)
		登陆验证 因为http协议是无状态协议,但是我们有时候需要这个状态,这个状态就是标识 前端提交from表单,后端获取对应输入值,与数据库对比,由此对象设置一个标识,该对象 在别的视图的时候,有此标识, ... 
- tornado框架&三层架构&MVC&MTV&模板语言&cookie&session
		web框架的本质其实就是socket服务端再加上业务逻辑处理, 比如像是Tornado这样的框架. 有一些框架则只包含业务逻辑处理, 例如Django, bottle, flask这些框架, 它们的使 ... 
- redis来共享各个服务器的session,并同时通过redis来缓存一些常用的资源,加快用户获得请求资源的速度(转)
		时间过得真快,再次登录博客园来写博,才发现距离上次的写博时间已经过去了一个月了,虽然是因为自己找了实习,但这也说明自己对时间的掌控能力还是没那么的强,哈哈,看来还需不断的努力啊!(这里得特别说明一下本 ... 
- 集群/分布式环境下5种session处理策略
		转载自:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread 前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访 ... 
- Cookie Session 与Token
		由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ... 
- Session会话与Cookie简单说明
		会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ... 
- Django之cookie+session
		前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ... 
- 【架构师之路】集群/分布式环境下5种session处理策略
		[架构师之路]集群/分布式环境下5种session处理策略 转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ... 
随机推荐
- kali2020-bash: openvas-setup:未找到命令 ,解决办法
			将openvas-setup命令换成 gvm-setup命令即可 
- vue后台管理系统——权限管理模块
			电商后台管理系统的功能--权限管理模块 1. 权限管理业务分析 通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制,即每个用户分配一个特定的角色,角色包括不同的功能权限. ... 
- Flutter showModalBottomSheet 顶部圆角
			showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ... 
- Debug --> wireshark中的lua插件使用
			一.使用Lua脚本对pcap文件按流进行存储 https://zhuanlan.zhihu.com/p/35188803 二.使用tshark对pcap报文进行批量切流 https://blog.cs ... 
- nRF51822蓝牙学习 进程记录 3:蓝牙协议学习--简单使用
			三天打鱼两天晒网,又学起了蓝牙,不过还好的是终于开始学习蓝牙协议部分了. 但是,一看起来增加了蓝牙协议的例程,真是没头绪啊.本身的教程资料解说太差了,看青风的蓝牙原理详解也是一头雾水. 经过不断地看各 ... 
- PHP实现JWT登录鉴权
			一.什么是JWT 1.简介 JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. 简单的说,JWT就是一种Token的编码算法,服务器端负责根据一个 ... 
- org.nutz.http.Http忽略https SSL证书验证
			访问的是一个https get请求,报错需要SSL证书验证,以下方法直接跳过 boolean check = Http.disableJvmHttpsCheck(); // 忽略https的证书检查 
- K8S多节点部署
			一.k8s多节点部署(接上篇博客) 1.环境准备 服务器 ip 组件 k8s集群master01 192.168.142.3 kube-apiserver.kube-controller-manage ... 
- vuw3学习大全(2)
			# composition(组合式api) ## 1.为什么使用composition vue3里面不需要Mixins了?因为有compoition api 能讲逻辑进行抽离和复用 大型组件中,其中* ... 
- 转载:谷歌浏览器一些https打不开点击高级不行的解决办法
			转载:https://blog.51cto.com/u_15275035/2925642 关于谷歌浏览器一些https网站打不开点击高级不行的解决办法有些url,在谷歌浏览器上打不开,点击高级也没有继 ... 
