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";
}