cookie & session
一、简介
- 会话 浏览器打开到关闭的整个过程
- 会话技术 记录会话中客户端的状态和数据,分为cookie和session
- cookie 数据存储在客户端本地,优点可以减少服务器端的压力,缺点安全性差
- session 数据存储在服务器端,优点安全性好,缺点服务器压力大
二、cookie
2.1 创建cookie
Cookie cookie = new Cookie("roomid","1205");
//最大保存时间,单位秒
cookie.setMaxAge(10*60);
//设置只在此映射路径访问时携带该cooki
cookie.setPath("/hcsdemo1/main");
response.addCookie(cookie);
删除cookie,只需要设置同名同路径的cookie生存时间为0,就可以立即销毁该cookie。
2.2 获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("roomid")){
System.out.println("roomid : "+cookie.getValue());
}
}
三、session
- 当客户端第一次访问到Servlet时,服务器会创建一个session,并有session的id,再返回给客户端。
当下次访问时,请求会携带该session,服务器会查找,查不到,或者没有携带,服务器都会重新创建。 - 浏览器关闭时,cookie中的session会默认清除
需要持久化session的地方,如登录成功后
//jsp如果在@page中不设置,则会默认生成
session.setAttribute("roomnumber","1205");
//session持久化
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*60*24);
cookie.setPath("/hcsdemo1");
//返回给浏览器
response.addCookie(cookie);
获取持久化的session,如在登录之前,判断,可免登陆,直接跳转到主界面
session = request.getSession();
String roomnumber = (String) session.getAttribute("roomnumber");
if (roomnumber != null) {
if (roomnumber.equals("1205")) {
//执行后,未执行的代码将不再执行
response.sendRedirect("main"); //路径可以是相对的,也可以是绝对的
//使用定时跳转,下方的代码会执行
// String path = request.getContextPath();
// String target = "main";
// String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/" + target;
//
// Integer staytime = 0;
//
// String content = staytime + ";URL=" + basePath;
//
// response.setHeader("REFRESH", content);
}
}