会话cookie

64 阅读2分钟

image.png package com.itheima.web;

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;

/**

  • 添加商品到购物车的Servlet */ @WebServlet("/addCart") public class AddCartServlet extends HttpServlet {

    /**

    • 添加商品到购物车
    • @param req
    • @param resp
    • @throws ServletException
    • @throws IOException */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.解决乱码问题 req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); //2.获取请求参数 String productName = req.getParameter("product"); //3.创建Cookie对象 Cookie cookie = new Cookie("productInfo",productName); //4.设置Cookie的最大存活时间 cookie.setMaxAge(Integer.MAX_VALUE); //5.把Cookie写到浏览器端 resp.addCookie(cookie); //6.告知浏览器已经写好了 resp.getWriter().write("已经添加好了,可以查看购物车了。"); resp.getWriter().write("现在查看?"); resp.getWriter().write("回到主页"); } } cookie不会因为浏览器关闭而丢失 30分钟 可能没有cookie package com.itheima.web;

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("/showCartInfo") public class ShowCartInfoServlet extends HttpServlet {

    /**

    • 把由AddCartServlet写的cookie在当前这个Servlet中读取出来,并显示

    • @param req

    • @param resp

    • @throws ServletException

    • @throws IOException */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.解决乱码问题 req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); //2.获取当前网站中的全部Cookie 数组

      Cookie[] cookies = req.getCookies(); //判断一下,数组是不是null if(cookies != null) { //3.取出每一个Cookie,看看是不是我们需要的 for (Cookie cookie : cookies) { if(cookie.getName().equals("productInfo")) { //4.如果是,就输出 resp.getWriter().write("购物车中的商品是:"+cookie.getValue()); return; } } } //5.如果没有就提示:没有 resp.getWriter().write("您还没有添加商品到购物车。"); resp.getWriter().write("现在添加?");

    } }

3. Cookie特点
    1. cookie存储数据在客户端(浏览器)
    2. cookie只能存储字符串
    3. 一个网站只能存20个cookie
    4. 一个浏览器访问的所有网站加起来最多存300个cookie
    5. cookie单个大小不能超过4KB 

image.png

  • 问题:cookie的存活时长是多少?

  • 回答:默认情况下,cookie会随着浏览器的关闭而销毁,但是可以通过使用cookie.setMaxAge(时长)来设置,时长参数支持: 负数: 随着浏览器的关闭而销毁 正数: 代表存活多少s(跟浏览器是否关闭无关) 0: 立即销毁