2021-03-11

http是无协议的,每次访问都是一次新的请求,服务器不知道是哪个用户的请求,为了解决这个问题,引入session,session是保存在服务器中的类似于map类型的资源。

当用户访问服务后,会生成一个字符串,并返回给服务器,每次请求服务器都会带上这个字符串,这就相当于是客户端通往服务器的卡,有了这个卡,服务器才能让客户端访问指定资源。

但是在分布式环境中,会导致session不一致,我们用springsesion解决这一问题,简单说就是将session缓存到redis中。

1、引入依赖

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

2、配置redis的连接信息

spring.redis.host=192.168.1.10
spring.redis.port=6379

3、将session数据保存到redis中

spring.session.store-type=redis
spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=spring:session

4、在启动类中添加注解

@EnableRedisHttpSession 

5、编写配置类,配置cookie和redis的序列化

@Configuration
public class SessionConfig {
    @Bean
    public CookieSerializer cookieSerializer(){
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
      //如果是子域名的session配置到父域名中,实现session共享
        cookieSerializer.setDomainName("abc.com");
        cookieSerializer.setCookieName("MySESSION");
        return cookieSerializer;
    }

    /**
     * redis的序列化
     * @return
     */
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

6、将数据保存到session域中

session.getAttribute("user");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值