Cookie技术

Cookie技术是一种客户端存储机制,服务器通过Set-Cookie响应浏览器,浏览器在后续请求时自动发送匹配路径的Cookie。主要涉及的基本概念、相关方法、生命周期、路径问题及特点。Java和JavaScript中可通过特定接口和类操作Cookie,但因安全性和存储限制,通常用于存储少量非敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cookie技术


1.基本概念

  • Cookie本意为”饼干“的含义,在这里表示客户端以“名-值”形式进行保存的一种技术。
  • 浏览器向服务器发送请求时,服务器将数据以Set-Cookie消息头的方式响应给浏览器,然后浏览器  会将这些数据以文本文件的方式保存起来。
  • 当浏览器再次访问服务器时,会将这些数据以Cookie消息头的方式发送给服务器。

2.相关方法

使用javax.servlet.http.Cookie类的构造方法实现Cookie的创建

方法声明

功能介绍

Cookie(String name, String value)

根据参数指定数值构造对象

使用javax.servlet.http.HttpServletResponse接口的成员方法实现Cookie的添加

方法声明

功能介绍

void addCookie(Cookie cookie)

添加参数指定的对象到响应

使用javax.servlet.http.HttpServletRequest接口的成员方法实现Cookie对象的获取

方法声明

功能介绍

Cookie[] getCookies()

返回此请求中包含的所有Cookie对象

使用javax.servlet.http.Cookie类的构造方法实现Cookie对象中属性的获取和修改

方法声明

功能介绍

String getName()

返回此Cookie对象中的名字

String getValue()

返回此Cookie对象的数值

void setValue(String newValue)

设置Cookie的数值

3.生命周期

  • 默认情况下,浏览器会将Cookie信息保存在内存中,只要浏览器关闭,Cookie信息就会消失。 
  • 如果希望关闭浏览器后Cookie信息仍有效,可以通过Cookie类的成员方法实现。

方法声明

功能介绍

int getMaxAge()

返回cookie的最长使用期限(以秒为单位)

void setMaxAge(int expiry)

设置cookie的最长保留时间(秒)

4.Cookie的路径问题

  • 浏览器在访问服务器时,会比较Cookie的路径与请求路径是否匹配,只有匹配的Cookie才会发送  给服务器。
  • Cookie的默认路径等于添加这个Cookie信息时的组件路径,例如:/项目名/目录/add.do请求添加  了一个Cookie信息,则该Cookie的路径是 /项目名/目录。
  • 访问的请求地址必须符合Cookie的路径或者其子路径时,浏览器才会发送Cookie信息。

5.Cookie的特点

Cookie技术不适合存储所有数据,程序员只用于存储少量、非敏感信息,原因如下:

  • 将状态数据保存在浏览器端,不安全。
  • 保存数据量有限制,大约4KB左右。
  • 只能保存字符串信息。
  • 可以通过浏览器设置为禁止使用。

5.代码示例

package com.lagou.demo03.servlet;

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(name = "CookieServlet", urlPatterns = "/cookie")
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.测试一下浏览器的请求是否到达
        System.out.println("看看有没有执行到这里哦!");
        // 2.创建Cookie对象并添加到响应信息中
        Cookie cookie = new Cookie("name", "zhangfei");
        response.addCookie(cookie);
        System.out.println("创建Cookie成功!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package com.lagou.demo03.servlet;

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(name = "CookieServlet2", urlPatterns = "/cookie2")
public class CookieServlet2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.获取客户端发来的Cookie信息并打印出来
        Cookie[] cookies = request.getCookies();
        System.out.println("获取到的Cookie信息有:");
        for (Cookie tc : cookies) {
            System.out.println(tc.getName() + "对应的值为:" + tc.getValue());
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package com.lagou.demo03.servlet;

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(name = "CookieServlet3", urlPatterns = "/cookie3")
public class CookieServlet3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.获取客户端发来的Cookie信息并打印出来
        Cookie[] cookies = request.getCookies();
        for (Cookie tc : cookies) {
            // 2.当获取到的Cookie对象的名字为name时,将对应的数值修改为guanyu并添加到响应信息中
            if ("name".equalsIgnoreCase(tc.getName())) {
                tc.setValue("guanyu");
                response.addCookie(tc);
                break;
            }
        }
        System.out.println("修改Cookie信息成功!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package com.lagou.demo03.servlet;

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(name = "CookieServlet4", urlPatterns = "/cookie4")
public class CookieServlet4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.创建Cookie信息
        Cookie cookie = new Cookie("name", "liubei");
        // 2.获取Cookie信息的默认使用期限
        int maxAge = cookie.getMaxAge();
        System.out.println("该Cookie的默认使用期限是:" + maxAge);
        // 3.修改Cookie信息的使用期限
        // 正数表示在指定的秒数后失效   负数表示浏览器关闭后失效   0表示马上失效
        //cookie.setMaxAge(0);
        cookie.setMaxAge(60*10);
        // 4.添加到响应信息中
        response.addCookie(cookie);
        System.out.println("设置Cookie的生命周期成功!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package com.lagou.demo03.servlet;

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(name = "CookieServlet5", urlPatterns = "/cookie5")
public class CookieServlet5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.创建Cookie对象并指定数值
        //Cookie cookie = new Cookie("name", "zhaoyun");
        Cookie cookie = new Cookie("name", "huangzhong");
        // 3.修改Cookie的路径信息
        cookie.setPath(request.getContextPath() + "/hello");
        // 2.添加到响应信息中
        response.addCookie(cookie);
        System.out.println("设置Cookie路径成功!");
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

enterpc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值