java web-02-cookie和session
1、保存会话的两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在session中!
常见场景:网站登录之后,之后就不用登录直接进入;
2、Cookie
2.1、获取cookie
public class Cookie01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
//服务器从客户端获取cookie,客户端可能不止一个
Cookie[] cookies = req.getCookies();
if (cookies != null) {
writer.write("上一次时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("lastLoginTime")){
long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
writer.write(date.toString());
}
}
}else {
writer.write("这是第一次登录本站");
}
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
添加映射
测试!
2.2、删除cookie
public class Cookie02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射
测试!
2.3、防止乱码
public class Cookie03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
//服务器从客户端获取cookie,客户端可能不止一个
Cookie[] cookies = req.getCookies();
if (cookies != null) {
writer.write("上一次访问名是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("username")) {
writer.write(URLEncoder.encode(cookie.getValue(),"utf-8"));
}
}
}else {
writer.write("这是第一次访问本站");
}
Cookie cookie = new Cookie("username", URLEncoder.encode("张三","utf-8"));
cookie.setMaxAge(60);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射
测试!
3、session
Session和Cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- Session把用户的数据写到用户独占Session中,服务器端保存
- Session对象由服务创建;
3.1、往session里面存东西
public class Session01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
session.setAttribute("name",new Person("zhangsan",20));
String id = session.getId();
if (session.isNew()) {
resp.getWriter().write("session创建成功"+id);
}else {
resp.getWriter().write("session已经存在服务器中:"+id);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射
测试!
3.2、从session中获取我们存进去的数据
public class Session02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
Person name = (Person) session.getAttribute("name");
resp.getWriter().println(name);
System.out.println(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射
测试!
3.3、注销session
public class Session03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
session.removeAttribute("name");//移除属性
session.invalidate();//注销session
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射
测试!
3.4、设置session自动失效时间
<session-config>
<!--以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>

浙公网安备 33010602011771号