Session共享问题解决

2023-07-12  本文已影响0人  公子请留步LookMe

一、session 复制

在Session复制中,多个服务器之间共享Session数据。当用户请求被分发到不同的服务器时,服务器之间会同步Session数据,以确保用户在任何服务器上的请求都可以获取到正确的Session信息。这种方法需要在服务器之间进行数据同步,增加了系统的复杂性和开销。

二、session 客户端存储

在Session客户端存储中,Session数据存储在客户端而不是服务器上。服务器只需要生成一个唯一的Session标识符,并将其发送给客户端,在后续的请求中,客户端会将Session标识符携带在请求中,服务器通过解析Session标识符来获取相关的Session数据。这种方法减轻了服务器的负担,并且不需要在服务器之间进行数据同步,但需要保证客户端的安全性,以防止Session数据被篡改。

三、hash一致性

在哈希一致性中,多个服务器根据请求的某个属性(例如IP地址或用户ID)进行哈希计算,将请求分配给特定的服务器处理,并将该服务器上的Session数据进行读写操作。通过使用一致性哈希算法,可以确保同一用户的请求始终被分配到同一个服务器上,从而实现Session数据的共享。这种方法需要保证哈希算法的一致性和服务器之间的数据同步。

亖、统一存储

使用SpringSession+redis 进行统一存储

SpringBoot 整合SpringSession+redis

        <!-- 整合springsession -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

配置文件

spring.session.store-type=redis

默认存储 是通过序列化形式进行存储,所以存储格式必须实现Serializable

configuration配置类(session redis存储类型修改成json格式):
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer(objectMapper());
    }

在父子域之间进行session同步共享需要将session的域配成大作用域

    @Bean
    public CookieSerializer cookieSerializer(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        defaultCookieSerializer.setCookieName("TESTCOOKIE");
        defaultCookieSerializer.setDomainName("gulimall.com");
        return defaultCookieSerializer;
    }
上一篇下一篇

猜你喜欢

热点阅读