Javaweb学习笔记day10---cookie

会话技术介绍

  • 为什么?
    • ServletRequest域对象共享范围太小了,ServletContext域对象共享范围太大了。
  • 概述
    • 指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏 览器(或者到了过期时间),会话结束。
  • 作用
    • 存储数据并实现共享
  • 分类
    • Cookie : 浏览器端会话技术
    • Session : 服务器端会话技术

cookie概述

  • 概述
    • 它是客户端浏览器的缓存文件,里面记录了客户浏览器访问网站的一些内容。同时,也是 HTTP协议请求头(Cookie)和响应头(Set-Cookie)的一部分
  • 作用
    • 它可以保存客户浏览器访问网站的相关内容(需要客户端不禁用Cookie)。从而在每次访问 需要同一个内容时,先从本地缓存获取,使资源共享,提高效率。
  • 常用属性
    • name : cookie名称
    • value : cookie值
    • path : cookie访问路径
    • maxAge : cookie存活时长

cookie的基本使用

  • 需求
    • ①创建Cookie对象
    • ②将Cookie对象返回给浏览器并保存
    • ③获取Cookie对象
  • 代码实现
@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //①创建Cookie对象
        String msg = "hello";
        Cookie cookie = new Cookie("msg",msg);
        //②将Cookie对象返回给浏览器并保存
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
@WebServlet("/demo02")
public class Demo02Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //③获取Cookie对象
        Cookie myCookie = null;//记录自己的Cookie对象
        Cookie[] cookies = request.getCookies();
        if (null != cookies && 0 != cookies.length) {
            for (Cookie cookie : cookies) {
                if ("msg".equals(cookie.getName())) {
                    myCookie = cookie;
                }
            }
        }
        if (null != myCookie) {
            System.out.println("name : " + myCookie.getName() + " , value : " + myCookie.getValue());
        } else {
            System.out.println("没有找到自己的cookie");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

cookie的执行流程

执行流程

  • ①浏览器发起第一次请求Demo01Servlet(msg)
    • 创建Cookie对象(name=msg,value=hello)
    • 通过Set-Cookie响应头将Cookie对象携带回浏览器
  • ②浏览器发起第二次请求Demo02Servlet(msg)
    • 通过Cookie请求头将Cookie对象信息携带到服务器

cookie的相关设置

  • 值限制
    • Cookie 的值不能包含逗号、分号、空格,不能以$开头。
  • 存活时长限制 : setMaxAge
    • -1 : 默认值,浏览会话结束时
    • 0 :立即销毁
    • 正数:设置cookie存活时长,以秒为单位
  • 访问路径限制 : setPath
    • 默认情况下,是"/项目访问路径",访问项目下所有资源都会携带Cookie
    • 完全匹配
      • 比如 : “/web15/xyz/index.html” , 只有"/web15/xyz/index.html"才会携带cookie
    • 目录匹配
      • 比如:"/web15/xyz","/web15/xyz/index.html"、"/web15/xyz/demo01.html"都 会携带cookie

cookie的销毁

  • 开发步骤
    • ①创建Cookie对象
      • 设置相同的名称
    • ②设置相同的访问路径
    • ③设置maxAge=0
  • 代码实现
@WebServlet("/demo06")
public class Demo06Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("msg3", "hello3");
        cookie.setPath("/");
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
@WebServlet("/demo07")
public class Demo07Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //①创建Cookie对象
        Cookie cookie = new Cookie("msg3", "helloworld");
        //②设置相同的访问路径
        cookie.setPath("/");
        //③设置maxAge=0
        cookie.setMaxAge(0);

        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值