javaWeb
【掌握】session的使用
一,session会话
1.1 概念
由客户端第一次向服务器发送请求开始,至多个请求的结束中间的过程称之为会话,javaweb的会话对象,用于保存当前会话过程中需要保存的数据,在下次请求或响应中都可以获取会话中的数据
1.2 工作原理
1)浏览器发出请求到服务器。
2)服务器会根据需求生成Session对象,并且给这个Session对象一个编号,一个编号对应一个Session对象
3)服务器把需要记录的数据封装到这个Session对象里,然后把这个Session对象保存下来。
4)服务器把这个Session对象的编号放到一个Cookie里,随着响应发送给浏览器
5)浏览器接收到这个cookie就会保存下来
6)当下一次浏览器再次请求该服务器服务,就会发送该Cookie
7)服务器得到这个Cookie,取出它的内容,它的内容就是一个Session的编号!!!
8)凭借这个Session编号找到对应的Session对象,然后利用该Session对象把保存的数据取出来!
1.3 使用
1.3.1 添加session
指的是向session中存储数据,因为session的创建是由服务器自动创建的,直接通方法可以获取到当前请求用户的session对象并进行数据的添加
//请求对象提供了直接获取session对象的方法
HttpSession session = request.getSession();
//将数据以key-value的形式存储在session作用域中
session.setAttribute("session", "session数据");
//session存储数据可以看作是map集合
1.3.2 查询session
通过session提供的方法通过指定的name获取value
//请求对象提供了直接获取session对象的方法
HttpSession session = request.getSession();
//session提供了直接获取指定数据与全部数据的方法
//可以直接通过指定key获取session中value的值
System.out.println(session.getAttribute("session"));
//也可以先获取所有的key之后遍历获取数据(不经常使用)
HashMap<String, Object> map=new HashMap<>();
//通过方法获取全部的name数组
String[] valueNames = session.getValueNames();
for (String string : valueNames) {
map.put(string, session.getAttribute(string));
}
System.out.println(map);
1.3.3 修改session
session中存储数据的结构类似于map,所以key不允许重复,所以对session的修改就是重新设置相同key的session数据
//请求对象提供了直接获取session对象的方法
HttpSession session = request.getSession();
//将数据以key-value的形式存储在session作用域中
session.setAttribute("session", "修改后的session数据");
session.setAttribute("session1", "修改后的session数据1");
//session存储数据可以看作是map集合
1.3.4 删除session
HttpSession session = request.getSession();
//删除session是使客户端请求时无法获取指定session中的指定数据
//1、通过修改将指定数据设置为null
session.setAttribute("session", null);
//2、通过session提供的方法将指定数据映射删除
session.removeAttribute("session");
//3、清除对应session的缓存
Cookie cookie=new Cookie("JSESSIONID", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
//4、通过session提供的方法将session对象进行删除
session.invalidate();
1.4 session的生命周期
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
session的活跃时间是由tomcat进行决定配置的,可以通过相应的配置文件进行修改
<session-config>
<session-timeout>30</session-timeout>
</session-config>
也可以通过相应的方法设置session的活跃时间
session.setMaxInactiveInterval(30);