zoukankan      html  css  js  c++  java
  • Java第四十二天,会话内容(二),Cookie(一)

    一、概念

    客户端会话技术,将数据保存到客户端

    二、使用

    1.设置 cookie

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet(urlPatterns = {"/first"})
    public class FirstServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 创建 cookie 对象
            Cookie cookie = new Cookie("name", "小明");
    
            // 设置 编码格式,并且告诉浏览器解码格式,防止中文乱码
            response.setContentType("text/html;charset=utf-8");
    
            // 将 cookie 添加到 response 对象中
            response.addCookie(cookie);
    
            // 重定向
            response.sendRedirect("second");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request,response);
        }
    }
    

    2.获取 cookie

    package web.servlet;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/second")
    public class SecondServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 获取到所有的 cookie
            Cookie[] cookies = request.getCookies();
            // 设置编码及解码格式
            response.setContentType("text/html;charset=utf-8");
            // 遍历所有 cookie
            for(Cookie cookie: cookies){
                response.getWriter().write(cookie.getName() + "===>" + cookie.getValue());
                response.getWriter().write("<br/>");
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    }
    

    三、Cookie 原理

    cookie 是基于响应头 set-cookie 和请求头 cookie 实现

    四、Cookie 细节

    1. 一次可以发送多个cookie;可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可

    2. cookie在浏览器中保存多长时间?

    • 默认情况下,当浏览器关闭后,Cookie数据被销毁
    • 持久化存储:
    Cookie.setMaxAge(int seconds)
    
    
    正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
    负数:默认值
    零:删除cookie信息

    3. 在tomcat 8 之前 cookie中不能直接存储中文数据;在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析

    4.cookie 的作用范围

    ①假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

    • 默认情况下cookie不能共享
    • setPath(String path);设置cookie的获取范围。默认情况下,设置当前的虚拟目录;如果要共享,则可以将path设置为 "/" 或其他共享目录

    ②不同的tomcat服务器间cookie共享问题

    • setDomain(String path);如果设置一级域名相同,那么多个服务器之间cookie可以共享

    五、Cookie 特点

    1. cookie存储数据在客户端浏览器,因此数据相对不安全
    2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
    作者:蓝月

    -------------------------------------------

    个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

  • 相关阅读:
    oracle sql 优化大全
    MyBatis学习笔记
    Eclipse启动项目时,删除workspaces无用的工作区间
    java 中 BigDecimal 怎么与 0 比较
    Mybatis 异常: The content of elements must consist of well-formed character data or markup
    ODS与数据仓库
    MyBatis 缓存
    管理信息系统需求调研分析指南
    Merge Into 语句代替Insert/Update在Oracle中的应用实战
    Oracle数据库常用函数使用--持续更新中
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573677.html
Copyright © 2011-2022 走看看