14.Redis如何管理Session? 嘻哈的简写笔记——Redis

Redis存Session步骤:
(1)导入SpringMVC框架依赖,导入mvc.xml即前端控制器;导入webapp文件夹,导入web.xml ;
(2)导入之后新建Controller类 ;
作用:新建sessionid这个sessionid就是要存入Redis的key值,sessionid的值内容是一个UUID保证了全球唯一;
将sessionid作为key存入Redis,并设置过期时间;他的value是一个对象的值(这里要序列化);
要把sessionid作为Cookie存到服务器,然后由服务器发送到客户端;因为客户端要凭借这个来进行标识是哪一个客户(session存入到Cookie终究是给客户用的);当然用到Cookie就要用到HttpServletResponse 类的response来响应(不响应用户无法获取Cookie);
重点说明:
1.这里的Cookie是新建一个常量用来标识(区分)我们设置的值,用户的
浏览器里还有其他的Cookie值;所以这里的Cookie有两个值,一个是我们自定义的常量JSESESSIONID2005,还有一个就是创建UUID也就是sessionid;
2.一些常用的常量要统一把他们整理到一个接口类中,这样使用时方便,也有利于管理;

@RequestMapping("/login")
public String login(HttpServletResponse response){
    User user = new User("藏三","999");

    //Redis管理Session时 Session和cookie要一起用
    //1.制作sessionID(UUID)  2.将"sessionID:user" 存入Redis
    //2.new Cookie() 其中存储sessionID
    String sessionid = UUID.randomUUID().toString();//新建UUID
    //[2]第二步
    Jedis jedis = new Jedis("10.11.57.76",6379);
    jedis.setex(sessionid,1800, JSON.toJSONString(user));
    //JSON.toJSOnString(user)是进行JSON转化的函数;
    // 设置超时,setex指令是设置过期时间

    //[3]第三步 存Cookie

    Cookie cookie = new Cookie("JSESSIONID2005",sessionid);
    response.addCookie(cookie);//创建Cookie一定要放到响应里面要不然就白创建了
    System.out.print("=============================");
    return "uui";
}

Redis取session步骤:(也就是取出值判断是否有值,是否登录
(1)利用request对象获取Cookie,然后循环遍历用户的Cookie,因为Cookie是个数组,有很多个,不只有我们自己设置的那个,遍历之后取出每一个Cookie和我们自己设置的字符串JSESESSIONID2005所比较,如果Cookie中有这个字符串那就取出这个字符串所代表的值,取出这个值存到sessionid之后呢就要判断这个值是不是null (因为sessionid默认值是null);如果是null说明就没有这个Cookie,但是如果不是null,那还要利用它为Key打开Redis取出Redis中的sessionid所代表的value值,看看这个值(**这个值是个对象)**是多少;

//判断是否登录
//获取Session
//1.通过request获取cookie  2.通过sessionID获取redis中的值
@RequestMapping("/query")
public String queryUser(HttpServletRequest request){
    Cookie[] cookies = request.getCookies();//获取的Cookie是个数组
    String sessionid = null;
    for(Cookie cookie : cookies){//遍历获取的Cookie数组;
        String name = cookie.getName();
        if(Constant2005.JSESSIONID.equals(name)){//我们设置的Cookie名字是JSESSIONID2005
            sessionid = cookie.getValue();                       //所以要用它比对是不是我们设置的Cookie值
        }//Constant2005.JSESSIONID是接口类里定义的常量
        //JSESSIONID2005 是重要的常量可以把他提取到一个接口类中
        //一些重点的值一般都是这样处理,进行统一管理
    }
    if(sessionid == null){ //如果sessionid是null的说明没有匹配上,也就说明没有存上Cookie
        return "error";//输出错误页面
    }
    Jedis jedis = new Jedis("10.11.57.76",6379);//进行连接
    String userJson = jedis.get(sessionid);//获取sessionid
    System.out.print("userJson" + userJson);
    if(userJson==null){
        return "error";
    }
    User user = JSON.parseObject(userJson,User.class);//进行反序列化
    return "OK";
}

。。。。。。。。。。。。。

嘻哈的简写笔记

。。。。。。。。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值