目录
会话管理
会话管理——管理浏览器和服务器之间会话过程中产生的数据,管理数据的技术有Cookie和Session两种
Cookie技术
会话的数据保存在浏览器上(客户端)
Cookie的使用
// 1、创建cookie对象
Cookie cookie1 = new Cookie("name", "yourname");
Cookie cookie2 = new Cookie("email", "12345@qq.com");
// 2、把cookie数据发送给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
// 3、接受浏览器的cookie信息
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c:cookies){
System.out.println(c.getName() + " " + c.getValue());
}
} else{
System.out.println("没有接收到cookie数据");
}
Cookie原理
1、服务器创建Cookie对象,并把数据存储到Cookie对象中
Cookie cookie1 = new Cookie("name", "myname");
2、服务器发送Cookie信息到浏览器
response.addCookie(cookie1);
说明:服务器是通过响应头(set-cookie)将数据发送给浏览器的
3、浏览器得到服务器的响应后,将响应头中的Cookie信息保存在服务器中
4、浏览器下次访问服务器时,请求头中会带着Cookie信息
5、服务器端接受浏览器发送的Cookie信息
Cookie[] cookies = request.getCookies()
说明:浏览器是通过请求头(cookie)将数据发送给服务器的
Cookie注意事项
1、Cookie的有效路径
cookie.setPath(path);
浏览器访问服务器时只会携带相应路径下的Cookie。Cookie对象不设置路径时默认路径为该Web应用。
2、Cookie的有效时间
cookie.setMaxAge(time);
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中,会话结束就删除该数据,即浏览器关闭cookie就丢失了。
零:表示删除同名的cookie数据
3、Cookie对保存数据的限制
Cookie只能保存非中文的字符串类型。每个Cookie的大小不能超过4K。
Session技术
会话的数据保存在服务器上
由于Cookie的使用有局限性,所以引进了Session技术。
Session的使用
public class SessionDemo1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.创建session对象
HttpSession session = request.getSession();
// 2.保存会话数据
session.setAttribute("name", "yourname");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
public class SessionDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.拿到session对象
HttpSession session = request.getSession();
// 2.拿到session里面所保存的会话数据
String name = (String) session.getAttribute("name");
System.out.println(name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Session的原理
1、第一次创建HttpSession对象会给其分配一个sessionID(JSESSION)
2、服务器会把JSESSION保存在一个Cookie对象中发给浏览器保存
Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);
3、浏览器再次request.getSession()的时候,会带着ISESSION访问服务器
如果服务器中存在对应sessionID的session对象,返回该对象
反之,创建新的session对象(像第一步一样)
说明:Cookie的有效时间默认为到会话结束,所以当关闭该浏览器再重新开一个的时候,并不能访问上一次保存在服务器里面的session对象。
Session注意事项
1、getSession()/getSession(true)——创建或得到session对象,没有匹配的session编号时自动创建新的session对象
getSession(false)——得到session对象,没有匹配的session编号时返回null
2、session的有效时间
setMaxInactiveInterval(int interval)
默认情况30分钟服务器自动回收
自己添加Cookie并设置保存时间
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
- 全局修改session有效时间
<session-config>
<session-timeout>1</session-timeout>
</session-config>