首页 > 其他 > 详细

Cookie

时间:2019-04-28 23:57:50      阅读:194      评论:0      收藏:0      [点我收藏+]

会话技术(Cookie和Session )

1. 会话

浏览器第一次给服务器发起请求,就建立一次会话,直到一方断开连接为止。

2.会话功能

在一次会话范围内的多次请求之间共享数据

3.会话技术的分类

  1. 客户端会话技术:Cookie,将数据保存到客户端

    1. 使用的步骤:

      1. 创建Cookie对象,绑定数据
        • new Cookie(String name, String value)
      2. 发送Cookie对象
        • response.addCookie(Cookie cookie)
      3. 获取Cookie对象,获取数据
        • Cookie[] request.getCookies():获取所有的Cookie
    2. cookie原理:

      这是基于响应头Set-Cookie和请求头Cookie实现的。

      1. 在ServletA里发送Cookie对象,在响应消息里设置响应头Set-Cookie: message=helloWorld,发送给浏览器,浏览器获得该响应消息,保存该信息
      2. 在同一次会话的不同请求下,浏览器的下次请求,会在请求信息的请求头里包含Cookie: message=helloWorld;,发送给服务器。
      3. 在ServletB里获取Cookie对象,便可以获取该信息

      技术分享图片

    3. Cookie的一些细节

      1. 可以创建、发送多个Cookie
      2. Cookie的存活时间
        1. 默认情况下,浏览器关闭后Cookie数据就被销毁
        2. 可以使用Cookie对象的方法 setMaxAge(int second) 设置存活时间,进行持久化处理
          • second为正数,表示持久化,second秒后才删除数据
          • second为负数,表示关闭浏览器就销毁cookie数据,这是默认值
          • second为0,表示删除该cookie数据
      3. Cookie存储中文数据
        1. 在Tomcat8之后就可以直接存储中文数据了
      4. Cookie的共享范围
        1. 在Tomcat服务器中,一个服务器里部署了多个web项目
          • 默认情况下是不能共享的
          • 共享范围可以用Cookie对象的方法 setPath(String path) 来设置,默认情况下就是当前项目。如果需要多个项目共享该Cookie对象,就可以设置为 setPath("/") 表示当前项目的根路径下的所有项目共享
        2. 其实哪怕在不同的服务器的之间,cookie也是也可共享的
          1. setDomain("string path"):如果设置相同的一级域名,那么多个服务器之间可以共享cookie:比如setDomain(".alibaba.com"),表示在任何 xxx.alibaba.com 之间的项目都可共享cookie
    4. Cookie的特点

      1. cookie数据存储在浏览器
      2. 浏览器对于单个Cookie的数据大小有限制(4kb),同一个域名下的cookie总数量也是有限制(20个)
    5. Cookie的作用

      1. cookie一般用于存储少量的不敏感的信息
      2. 在不登录的情况下来完成服务器对客户端的身份识别
    6. 使用cookie实现展示上一次访问时间的小功能:

      1. 首先获取cookie,查看是否有name为lastTime得到cookie
        1. 如果有:获取他的值,并展示在页面
        2. 如果无:创建这个cookie,设置他的值
      2. 由于时间的格式含有空格(这个特殊字符无法设置为cookie的值),因此要用URLencodeer和URLdecoder处理一下转化为不含空空格的格式,再存储到cookie
      @WebServlet("/AccessTimeServlet")
      public class AccessTimeServlet extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              response.setContentType("text/html;charset=utf-8");
              Cookie[] cookies = request.getCookies();
              boolean flag = false;
              if (cookies != null && cookies.length != 0) {
                  for (Cookie cookie : cookies) {
                      if ("lastTime".equals(cookie.getName())) {
                          flag = true;
                          String lastTime = URLDecoder.decode(cookie.getValue(), "utf-8");
                          response.getOutputStream().write(("欢迎再次访问,您上次访问时间为:" + lastTime).getBytes("utf-8"));
      
                          Date date = new Date();
      
                          String str_date = "yyyy年MM月dd日 hh:mm:ss";
                          SimpleDateFormat simpleDateFormat = new SimpleDateFormat(str_date);
      
                          str_date = simpleDateFormat.format(date);
                          str_date = URLEncoder.encode(str_date, "utf-8");
      
      
                          cookie.setValue(str_date);
                          response.addCookie(cookie);
      
                      }
                  }
              }
              if (cookies == null || cookies.length == 0 || !flag) {
                  response.getOutputStream().write("欢迎您第一次访问".getBytes("utf-8"));
                  Date date = new Date();
                  String str_date = "yyyy年MM月dd日 hh:mm:ss";
                  SimpleDateFormat format = new SimpleDateFormat(str_date);
                  str_date = format.format(date);
                  str_date = URLEncoder.encode(str_date, "utf-8");
      
                  Cookie cookie = new Cookie("lastTime", str_date);
                  response.addCookie(cookie);
              }
          }
      
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request, response);
          }
      }
      

Cookie

原文:https://www.cnblogs.com/zhuobo/p/10787697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!