设为首页 加入收藏

TOP

day20-web开发会话技术02(一)
2023-07-25 21:34:13 】 浏览:43
Tags:day20-web

WEB开发会话技术02

6.Cookie的生命周期

默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失。但是也可以通过方法设置cookie的生存时间。

cookie的生命周期指的是如何管理cookie,什么时候cookie被销毁。

  • setMaxAge(int expiry):设置 cookie 的最大生存时间,以秒为单位
    • 整数:表示在指定的秒数后过期
    • 负数:表示浏览器关闭,cookie就会被删除(默认值是-1)
    • 0,表示马上删除cookie

6.1cookie生命周期expiry>0

CookieLive:

package com.li.cookie;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = {"/CookieLive"})
public class CookieLive extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("CookieLive doPost被调用...");
        //创建一个cookie,生命周期为 60s
        Cookie cookie = new Cookie("job", "java");
        //1.从创建改cookie开始计时,60秒后就无效
        //2.由浏览器来根据创建的时间来开始计时,到时间后就认为该cookie无效
        //3.如果该cookie无效了,那么浏览器在发出HTTP请求时,就不会带上该cookie
        cookie.setMaxAge(60);

        //将cookie保存到浏览器
        response.addCookie(cookie);

        //给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>设置cookie生命周期成功</h1>");
        writer.flush();
        writer.close();
    }
}
  1. 在浏览器中访问该servlet:

    image-20221120221656177

  2. 可以看到该cookie的创建于: "Sun, 20 Nov 2022 14:15:39 GMT"

    真实时间为上述时间再加八小时

    image-20221120221755132
  3. 超过60s后,再去访问Tomcat服务器:

    image-20221120222222568

    可以看到在浏览器发送的HTTP请求中的Cookie字段已经没有了设置的cookie:

说明:由浏览器来根据创建的时间来开始计时,到时间后就认为该cookie无效。如果该cookie无效了,那么浏览器在发出HTTP请求时,就不会带上该cookie。

但是此时cookie没有被删除,在关闭浏览器的时候才会被删除。

6.2演示删除cookie(expiry=0)

删除下图名为username的cookie

image-20221121162351398
package com.li.cookie;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = {"/cookieLive"})
public class CookieLive extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示删除一个cookie
        //1.先得到usernameCookie
        Cookie[] cookies = request.getCookies();
        Cookie usernameCookie =
                CookieUtils.readCookieByName("username", cookies);
        if (usernameCookie != null) {
            //2.将其生命周期设置为0
            usernameCookie.setMaxAge(0);
            //3.重新保存该cookie,因为你将其生命周期设置为0,就等价于让浏览器删除该cookie
            response.addCookie(usernameCookie);//在响应体的Set-Cookie
        } else {
            System.out.println("没有找到该cookie");
        }

        //给浏览器返回信息
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>设置cookie生命周期成功</h1>");
        writer.flush();
        writer.close();
    }
}

redeployTomcat,浏览器访问该servlet,点击查看HTTP响应包:可以看到响应包中设置了该cookie的过期时间为1970年,这意味着浏览器将立即删除该cookie。

  1. Set-Cookie: username=jack; Expires=Thu, 01-Jan-1970 00:00:10 GMT

    image-20221121163544953
  2. 点击查看cookie存储,可以发现该cookie已经被删除了

    image-20221121163639913

说明:setMaxAge()方法设置参数为零时,当浏览器接收到服务器的响应包时,会立即删除

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java学习四 下一篇Java 中九种 Map 的遍历方式,你..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目