• Cookie


    会话技术(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);
            }
        }
        
        
  • 相关阅读:
    localStroage 和sessionStorage的区别
    audio 在ios无法播放问题解决
    判断是否在微信浏览器中打开
    使用CSS样式的方式
    Django总结
    Django框架初步
    HTML表单设计(下)
    HTML表单设计(上)
    HTML框架
    nohup和&后台运行,查看占用端口进程
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10787697.html
Copyright © 2020-2023  润新知