揭秘getSession()底层逻辑:参数true与false的区别

揭秘getSession()底层逻辑:参数true与false的区别
在学习如何获取Session的时候我们用到了一个方法getSession 都知道getSession ()是HttpServletRequest类的一个方法作用是获取session但你真的知道这方法的底层逻辑吗很多人都不知道getAttribute其实有两种类型HttpSession getSession ()HttpSession getSession (Bool rawl)无参方法默认括号中是true带参方法中可以选择填true或false填true获取Session的时候如果没有找到session就返回一个空的HttpSession对象填false获取Session的时候如果没有找到session就返回null接下来我们将通过获取session的全过程来了解这两个有什么区别Session是存储在服务端用来记录客户端和会话之间的对应关系要想获取到session我们首先第一步要做的是存储Session存储之后再次获取session注意这次参数要填false我们才能根据HttpSession是否是null来判断有没有获取sessionHttpSession为null表示获取失败未找到用户信息HttpSession不为null表示成功获取sessionRestController RequestMapping(/request) public class RequestController { RequestMapping(/r20) public String getSession(HttpServletRequest request){ HttpSession session request.getSession();//没有session返回一个空的httpSession //存储session session.setAttribute(userName,zhangsan); //获取Session HttpSession httpSessionrequest.getSession(false); if(httpSessionnull){ //存储失败 return 获取失败; }else { return 获取成功,用户姓名为httpSession.getAttribute(userName); } } }注意事项代码中session.setAttribute(userName,zhangsan);是存储session的键值对结构默认存储在内存中服务器重启就消失从代码中我们很难看出getSession是怎么实现的其实是从Cookie中找到携带的唯一字符串“SessionId根据SessionId找到唯一对应的SessionSession存储在服务器如果我们不先存储Session是无法拿到Session的会话是服务器和客户端之间不间断的通信当通信中断会话才会中断也就是说只要不关闭浏览器会话就一直持续

最新新闻

日新闻

周新闻

月新闻