Redis 是一种高性能的缓存和 key-value 存储系统,常被用来实现分布式 Session 的方案。在这种方案中,用户的登录信息存储在 Redis 中,而不是存储在本地的 cookie 或 session 中。

当用户在集群中的不同节点之间切换时,通过读取 Redis 中的登录信息,各个节点可以实现登录态的同步。这种方式能够解决传统基于 cookie 和 session 的方案中,不同节点之间登录状态不同步的问题。此外,由于 Redis 的高可用和高性能,使得在分布式环境下,访问登录信息时速度更快,同时能够更好地应对高并发请求的情况。

配置简单,只需在yml中增加以下配置。

  #session失效时间
session:
timeout: 86400
store-type: redis

相比于传统的基于 cookie 和 session 的方案,使用 Redis 实现分布式 Session 有以下区别:

  1. 数据存储位置:普通的cookie session将数据存储在客户端浏览器中,而Redis分布式Session将数据存储在Redis服务器中。
  2. 可扩展性:Redis分布式Session可以方便地扩展应用程序,使得多个应用程序可以共享用户的Session数据,而普通的cookie session需要在每个应用程序上维护一份Session数据,难以扩展。
  3. 高性能:Redis 具有高性能的缓存机制,能够快速读写登录信息,保证在高并发场景下的用户体验。
  4. 可靠性:Redis分布式Session使用了Redis的高可用特性,可以提供更高的可靠性,而普通的cookie session在浏览器关闭或者清除Cookie的情况下会丢失Session数据。
  5. 跨平台性:由于 Redis 是基于网络的存储,能够跨平台地进行存储和读取登录信息,提高了应用的可移植性和扩展性。
  6. 安全性: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有什么区别?的更多相关文章

  1. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  2. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题

    先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...

  3. 登陆验证系统实例-三种(cookie,session,auth)

    登陆验证 因为http协议是无状态协议,但是我们有时候需要这个状态,这个状态就是标识 前端提交from表单,后端获取对应输入值,与数据库对比,由此对象设置一个标识,该对象 在别的视图的时候,有此标识, ...

  4. tornado框架&三层架构&MVC&MTV&模板语言&cookie&session

    web框架的本质其实就是socket服务端再加上业务逻辑处理, 比如像是Tornado这样的框架. 有一些框架则只包含业务逻辑处理, 例如Django, bottle, flask这些框架, 它们的使 ...

  5. redis来共享各个服务器的session,并同时通过redis来缓存一些常用的资源,加快用户获得请求资源的速度(转)

    时间过得真快,再次登录博客园来写博,才发现距离上次的写博时间已经过去了一个月了,虽然是因为自己找了实习,但这也说明自己对时间的掌控能力还是没那么的强,哈哈,看来还需不断的努力啊!(这里得特别说明一下本 ...

  6. 集群/分布式环境下5种session处理策略

    转载自:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread 前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访 ...

  7. Cookie Session 与Token

    由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...

  8. Session会话与Cookie简单说明

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  9. Django之cookie+session

    前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ...

  10. 【架构师之路】集群/分布式环境下5种session处理策略

    [架构师之路]集群/分布式环境下5种session处理策略   转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...

随机推荐

  1. kali2020-bash: openvas-setup:未找到命令 ,解决办法

    将openvas-setup命令换成 gvm-setup命令即可

  2. vue后台管理系统——权限管理模块

    电商后台管理系统的功能--权限管理模块 1. 权限管理业务分析 通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制,即每个用户分配一个特定的角色,角色包括不同的功能权限. ...

  3. Flutter showModalBottomSheet 顶部圆角

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...

  4. Debug --> wireshark中的lua插件使用

    一.使用Lua脚本对pcap文件按流进行存储 https://zhuanlan.zhihu.com/p/35188803 二.使用tshark对pcap报文进行批量切流 https://blog.cs ...

  5. nRF51822蓝牙学习 进程记录 3:蓝牙协议学习--简单使用

    三天打鱼两天晒网,又学起了蓝牙,不过还好的是终于开始学习蓝牙协议部分了. 但是,一看起来增加了蓝牙协议的例程,真是没头绪啊.本身的教程资料解说太差了,看青风的蓝牙原理详解也是一头雾水. 经过不断地看各 ...

  6. PHP实现JWT登录鉴权

    一.什么是JWT 1.简介 JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. 简单的说,JWT就是一种Token的编码算法,服务器端负责根据一个 ...

  7. org.nutz.http.Http忽略https SSL证书验证

    访问的是一个https get请求,报错需要SSL证书验证,以下方法直接跳过 boolean check = Http.disableJvmHttpsCheck(); // 忽略https的证书检查

  8. K8S多节点部署

    一.k8s多节点部署(接上篇博客) 1.环境准备 服务器 ip 组件 k8s集群master01 192.168.142.3 kube-apiserver.kube-controller-manage ...

  9. vuw3学习大全(2)

    # composition(组合式api) ## 1.为什么使用composition vue3里面不需要Mixins了?因为有compoition api 能讲逻辑进行抽离和复用 大型组件中,其中* ...

  10. 转载:谷歌浏览器一些https打不开点击高级不行的解决办法

    转载:https://blog.51cto.com/u_15275035/2925642 关于谷歌浏览器一些https网站打不开点击高级不行的解决办法有些url,在谷歌浏览器上打不开,点击高级也没有继 ...