session与cookie的一些认识

一:后台获取并且判断是否禁用cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies){
    if (cookie.getName().equals("JSESSIONID")){
        logger.info("cookie传过来的值为:"+cookie.getValue());
    }
}

拓展:如果被禁用,只能使用url path的方法去携带sessionId,在后台session的setAttribute()方法后面首先获取此时的sessionId然后丢到session中,用redirect是直接把参数用?JSESSIONID=session.getId()出去前台,此时浏览器会携带该参数,然后后台会自动进行判断,结束

重点:分布式系统的session一致性的实现:

在后台创建RedisSessionConfig 类,通过redis存放session的信息来达到session分布式的一致性要求。代码如下:

/**
 * redis session 配置策略(cookie和header),默认cookie
 * 作用:开启session-redis
 *
 */
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800, redisNamespace = "session-map")
public class RedisSessionConfig {

    //使用了下面配置后,每次获取session都是新的session,导致session不一致(推测可能受了前台cookie的影响)
    //如果该配置不要,则会产生一个问题:服务器会生成一个session存在cookie中,开始正常,之后会生成就jsessionID,此时如果在被session拦截器拦截,此时获取的
    //session id 为jsesssionId的value,说明了以前session登录判断都是通过jsessionId来进行判断是否登录的
    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
            return new CookieHttpSessionStrategy();
         /*  return new HeaderHttpSessionStrategy();*/
    }
}

在这里使用的是cookieHttpSessionStrategy() 策略,就是当前台可以使用cookie时,cookie和session联合使用,跟踪用户信息,和普通的会话保持机制一样。用HeaderHttpSessionStrategy() 在这里不成功,猜测应该是没有自定义url加上jsessionId导致的

猜你喜欢

转载自blog.csdn.net/qq_35152911/article/details/81699415