cookie和session
2018-07-09 14:11 yelena 阅读(158) 评论(0) 编辑 收藏 举报回话技术:帮助服务器记住客户端状态(区分客户端)
cookie:数据存储在客户端本地,减少服务器端的存储压力,安全性不好,客户端可以清楚cookie
session:数据存储在服务器端,安全性好,增加服务器压力
cookie(不能存储中文)
1、服务器端向客户端发送一个cookie
//1.创建cookie对象 Cookie cookie = new Cookie("goods", "peanut"); //设置cookie的持久化时间 //cookie.setMaxAge(2*60); //设置cookie路径 //cookie.setPath("/WEB05/demo/SendCookieServlet"); cookie.setPath("/WEB05"); //2.cookie response.addCookie(cookie);
删除cookie:设置一个同名同路径持久化时间为0的新cookie覆盖
//删除客户端保存的cookie Cookie cookie = new Cookie("goods", "peanut"); cookie.setPath("/WEB05"); cookie.setMaxAge(0); response.addCookie(cookie);
2、服务器端接收客户端携带的cookie
//获取客户端的cookie数据 Cookie[] cookie = request.getCookies(); //通过cookiename获取cookie值 if(cookie!=null){ for(Cookie c:cookie){ String cookieName = c.getName(); if(cookieName.equals("goods")){ System.out.println(c.getValue()); } } }
cookie的实际使用
记录上一次登录时间
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String lasttime = sdf.format(date); Cookie cookie = new Cookie("lasttime", lasttime); cookie.setMaxAge(10*60); response.addCookie(cookie); String lastaccesstime = null; Cookie[] cookies = request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ String cookieName = c.getName(); if(cookieName.equals("lasttime")){ lastaccesstime=c.getValue(); response.setContentType("text/html;charset=utf-8"); response.getWriter().write(lastaccesstime); } } }if(lastaccesstime==null){ response.setContentType("text/html;charset=utf-8"); response.getWriter().write("第一次访问"); }
session(也是一个域对象)
为每个客户端都创建一块内存空间 存储客户的数据,客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间
需要借助于Cookie存储客户的唯一性标识JSESSIONID
1、获取客户端的域对象
HttpSession session = request.getSession();
2、向session域中存数据
session.setAttribute("name", "王者荣耀");
持久化存储session
//获取JSESSIONID String id = session.getId(); //手动创建一个cookie存储JSESSIONID Cookie cookie = new Cookie("JSESSIONID", id); cookie.setPath("/WEB05"); cookie.setMaxAge(2*60); response.addCookie(cookie); response.getWriter().write(id);
获得session域中的内容
//获取session对象 HttpSession session = request.getSession(); String name =(String)session.getAttribute("name"); response.setContentType("text/html;charset=utf-8"); response.getWriter().write(name);
原理:关闭会话,session消失,指的是jsessionid消失,session还存在在服务器中,把jsessionid存储到cookie中,通过设置cookie的持久化时间,实现session的持久化使用
session的生命周期
1、创建:第一次执行request.getsession()时创建
2、销毁:服务器关闭、session过期/失效(默认30分钟-从不操作服务器端的资源开始)、手动销毁 invalidate()方法
session域的作用范围
默认一次会话中(一次会话中任何资源公用一个session对象)
session是把jsessionid存到cookie中,通过cookie中的id去找客户端的自己的session