欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  JAVA基础之会话技术-Cookie及Session
 
  至此,学习Servlet三个域对象:ServletContext(web项目)、request(一次请求)、Session(一个客户端)!均有相同的方法!
 
  从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束。在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值。数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁!
 
  一、会话技术简介:
 
  1、存储客户端的状态:
 
  因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。
 
  会话技术是帮助服务器记住客户端状态(区分客户端)
 
  2、会话技术:
 
  ①、从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。
 
  ②、会话技术分为Cookie和Session:
 
  Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie.
 
  Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。
 
  二、Cookie技术:
 
  1、服务器向客户端发送一个Cookie(不能存中文)
 
  Cookiecookie=newCookie(Stringname,Stringvalue)
 
  2、设置cookie在客户端的持久化时间:
 
  cookie.setMaxAge(intseconds)
 
  如果不设置持久化时间,cookie会存储到浏览器的内存中,浏览器关闭时cookie信息销毁。设置了的话,会在规定的时间内存在。
 
  3、设置cookie的携带路径:
 
  cookie.setPath(Stringpath)
 
  如果不设置携带路径,cookie信息在访问产生该cookie的web资源所在的路径都携带cookie信息。
 
  4、向客户端发送cookie
 
  response.addCookie(Cookiecookie)
 
  5、删除客户端的cookie
 
  使用同名同路径的持久化时间为0的cookie进行覆盖
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //创建Cookie对象
 
  Cookiecookie=newCookie("godds","naiping");
 
  //设置持久化时间(从请求Servlet开始)
 
  cookie.setMaxAge(60*2);
 
  //设置cookie携带路径(只有访问此路径才携带)
 
  //cookie.setPath("/WEB07/SendCookieServlet");
 
  /*cookie.setPath("/WEB07");
 
  cookie.setPath("/");*/
 
  //发送
 
  response.addCookie(cookie);
 
  }
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //删除Cookie
 
  Cookiecookie=newCookie("goods","naiping");
 
  cookie.setMaxAge(0);
 
  response.addCookie(cookie);
 
  }
 
  6、服务器接收客户端携带cookie的方式:
 
  以请求头的方式发送到服务器端的
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //获取cookie数组
 
  Cookie[]cookies=request.getCookies();
 
  //遍历cookie数组通过cookie名获取cookie值
 
  for(Cookiec:cookies){
 
  if(c.getName().equals("goods")){
 
  System.out.println(c.getValue());
 
  }
 
  }
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //获取当前的时间对象
 
  Datedate=newDate();
 
  //创建日期转换类对象
 
  SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH-mm-ss");
 
  //将日期对象转为字符串
 
  Stringtime=sdf.format(date);
 
  //创建cookie对象,记录当前访问时间
 
  Cookiecookie=newCookie("lastTime",time);
 
  cookie.setMaxAge(60*10);
 
  //发送cookie
 
  response.addCookie(cookie);
 
  //接收cookie
 
  Cookie[]cookies=request.getCookies();
 
  //定义变量存储上次访问时间
 
  StringlastTime=null;
 
  //遍历
 
  for(Cookiec:cookies){
 
  if(c.getName().equals("lastTime")){
 
  lastTime=c.getValue();
 
  }
 
  }
 
  //解决响应乱码
 
  response.setContentType("text/html;charset=utf-8");
 
  if(lastTime==null){
 
  //第一次访问
 
  response.getWriter().write("您是第一次访问");
 
  }else{
 
  response.getWriter().write("您上次访问时间为"+lastTime);
 
  }
 
  }
 
  三、Session技术:(一个域对象)
 
  1、简介:
 
  Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。
 
  2、获得Session对象:
 
  HttpSessionsession=request.getSession()
 
  此方法会获得专属于当前会话(当前客户端)的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session了)
 
  3、域对象的存取数据;
 
  4、生命周期:
 
  ①、创建:
 
  第一次执行request.getSession()时创建
 
  ②、销毁:
 
  服务器非正常关闭时;
 
  Session过期、失效(默认30分钟)
 
  手动销毁Session
 
  ③、作用范围:
 
  默认在一次会话中,也就是说,在一次会话中任何资源公用一个session对象。
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //获取Session域中的内容
 
  HttpSessionsession=request.getSession();
 
  //获取Session中的内容
 
  Stringgoods=(String)session.getAttribute("goods");
 
  //解决乱码
 
  response.setContentType("text/html;charset=utf-8");
 
  response.getWriter().write(goods);
 
  }
 
  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
 
  //获取Session对象
 
  HttpSessionsession=request.getSession();
 
  //向Session域中存储数据(cookie不能存汉字)
 
  session.setAttribute("goods","奶瓶");
 
  //获取JESSIONID
 
  Stringid=session.getId();
 
  //设置持久化时间---创建一个新的cookie设置其时间并覆盖原来的
 
  //创建Cookie
 
  Cookiecookie=newCookie("JSESSIONID",id);
 
  cookie.setPath("/WEB08");
 
  cookie.setMaxAge(60*3);
 
  //发送cookie
 
  response.addCookie(cookie);
 
  response.getWriter().write("JSESSIONID:"+id);
 
  //结果JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230
 
  }
 
  

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56951.shtml