首页 > 数据库 >Redis分布式Session和普通的cookie session有什么区别?

Redis分布式Session和普通的cookie session有什么区别?

时间:2023-03-29 13:00:11浏览次数:33  
标签:Session Redis session cookie 哈希 ID

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中。

标签:Session,Redis,session,cookie,哈希,ID
From: https://www.cnblogs.com/crazyfish/p/17268531.html

相关文章

  • 威联通 Docker 创建Redis并完成配置的步骤,版本7.0.10
    威联通Docker创建Redis并完成配置的步骤。1、下载Redis配置文件,下载地址为(这里为7.0.1版本,与安装版本大版本号相近就行):https://github.com/redis/redis/blob/7.0.10/red......
  • Redis-单一接口优化
    【性能优化】单一接口优化过程全记录(主要涉及Redis)接口优化过程记录 问题背景 某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis......
  • mongodb和redis设计原理简析
    redis:1、NIO通信  因都在内存操作,所以逻辑的操作非常快,减少了CPU的切换开销,所以为单线程的模式(逻辑处理线程和主线程是一个)。  reactor模式,实......
  • Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from tr
    Writeoperationsarenotallowedinread-onlymode(FlushMode.NEVER/MANUAL):TurnyourSessionintoFlushMode.COMMIT/AUorg.springframework.dao.InvalidDataAccess......
  • 解决 Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker
    org.springframework.dao.InvalidDataAccessApiUsageException:Writeoperationsarenotallowedinread-onlymode(FlushMode.NEVER/MANUAL):TurnyourSessioninto......
  • redis-cli 命令详解
    redis-cli命令详解  redis-cli命令使用命令使用redis-cli[OPTIONS][cmd[arg[arg...]]]选项说明-h<hostname>Serverhostname(default:127.0......
  • Redis 在新浪微博中的应用
    Redis在新浪微博中的应用Redis简介1.支持5种数据结构支持strings,hashes,lists,sets,sortedsets string是很好的存储方式,用来做计数存储。sets用于建立索引库非常棒......
  • jredis
    /**Copyright2009JoubinMohammadHoushyar**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexcept......
  • Redis应用场景
    Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同......
  • 非看不可的Redis持久化
    目录写在前面摘要Redis持久化介绍RDB原理Fork函数与写时复制关于写时复制的思考RDB相关配置AOF原理AOF持久化配置AOF文件解读AOF文件修复AOF重写AOF缓冲区与AOF重写缓存区A......