Servlet
Cookie
存储在客户端的对象,存数据(key-value)
不安全,存数据有限-------4kb
- 通过服务器的程序Servlet,把Cookie对象存到客户端
@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//cookie存储的数据只能是字符串
Cookie cookie1 = new Cookie("name1","admin1");
Cookie cookie2 = new Cookie("name2","admin2");
cookie2.setMaxAge(1800);//设置时间,时间单位是秒
//添加cookie到客户端
resp.addCookie(cookie1);
resp.addCookie(cookie2);
}
}
@WebServlet("/GetCookieServlet")
public class GetCookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException ,IOException {
Cookie[] cookies = req.getCookies();
if(cookies != null) {
for(Cookie c : cookies) {
if(c.getName().equals("name1")) {
resp.getWriter().write(c.getValue());
}
if(c.getName().equals("name2")) {
resp.getWriter().write(c.getValue());
}
}
}
}
}
- cookie生命周期
2.1 暂时性的cookie(没有设置时间)
浏览器关闭即失效
2.2 永久性cookie(通过setMaxAge设置了时间)
过了时间失效
2.3 调用setMaxAge(0);即失效
Session
服务器和客户端连续的会话(请求响应)过程,需要管理数据,这个过程中对数据的管理叫会话管理
- 获取session对象
request.getSession(); 和 request.getSession(true); 都是第一次被调用时创建session对象,在session没有失效期间,再次被调用时返回session对象
request.getSession(false);是第一次被调用时创建session对象,在session没有失效期间,再次被调用时返回null - session的常用方法
@WebServlet("/SessionServlet")
public class SessionServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
System.out.println(session.isNew());
System.out.println(session.getId());
System.out.println(session.getMaxInactiveInterval());
System.out.println(new Date(session.getLastAccessedTime()));
}
}
- session存储数据
setAttribute(); getAttribute(); removeAttribute(); - session的工作原理
创建session对象时,会有一个唯一的id(JSESSIONID)标识当前session,当响应客户端时,会把JSESSIONID存放到Cookie中,当客户端再次请求服务器时,JSESSIONID会作为请求头信息的一部分返回到服务器,服务器根据JSESSIONID判断session对象,如果找到了对应的session,则返回该session对象,如果没找到,则创建一个新的session对象 - session失效时间
5.1 默认是30分钟没有访问就失效
5.2 设置session失效时间
session.setMaxInactiveInterval(1800);//单位是秒
5.3 无条件让session失效,调用该方法,session就失效
session.invalidate();
总结
request:一次请求
session:一次会话
application:整个应用