cookie和session

匿名 (未验证) 提交于 2019-12-03 00:40:02

回话技术:帮助服务器记住客户端状态(区分客户端)

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

原文:https://www.cnblogs.com/yelena-niu/p/9283565.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!