美文网首页
Session共享问题解决

Session共享问题解决

作者: 公子请留步LookMe | 来源:发表于2023-07-12 16:41 被阅读0次

    一、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;
        }
    

    相关文章

      网友评论

          本文标题:Session共享问题解决

          本文链接:https://www.haomeiwen.com/subject/gqfoldtx.html