java cookie 原理_Javaweb学习笔记之Cookie(一):Cookie 的使用(原理)-Go语言中文社区

package com.demo.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;

/*

会话管理:管理浏览器客户端和服务器之间会话过程中产生的会话数据;

会话管理需要用到会话技术,会话技术有两种:

1、Cookie 技术:会话数据保存在浏览器客户端;

2、Session 技术:会话数据保存在服务器端;

Cookie 类:用于存储会话数据;

1、构造 Cookie 对象;

new Cookie(String name, String value);

2、设置 cookie

setPath(String uri):设置 cookie 的有效访问路径;

setMaxAge(int expiry):设置 cookie 的有效时间;

setValue(String newValue):设置 cookie 的值;

3、发送 cookie 到浏览器端保存

response.addCookie(Cookie cookie);

4、服务器端接收 cookie,获取到的是一个 Cookie 的集合;

Cookie[] request.getCookies();

Cookie 的原理:

1、服务器创建 cookie 对象,把会话数据保存到 cookie 对象中;

new Cookie("name", "value");

2、服务器发送 cookie 对象到浏览器客户端;

response.addCookie(cookie);

3、浏览器得到服务器发送的 cookie,然后保存到浏览器端;

4、浏览器在下次访问服务器时,会将 cookie 信息一起发送到服务器;

5、服务器接收浏览器发送的 cookie,对 cookie 中的会话数据进行解析;

request.getCookies();

Cookie 数据类型只能存储 字符串类型(不支持中文);一个 cookie 只能标识一种信息,他至少包含一个标识该信息的名称(NAME)和值(VALUE);

一个 web站点 可以给一个 web浏览器 发送多条cookie,一个 web浏览器 也可以存储 多个web站点 提供的cookie;

浏览器一般只允许存放300个 cookie,每个站点最多存放20个 cookie,每个 cookie 的大小限制为 4KB;

*/

@WebServlet(name = "CookieDemo1", value = "/CookieDemo1")

public class CookieDemo1 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// 通过 响应头和请求头 实现 cookie 数据的发送和接收

// 1、设置 set-cookie 响应头,将 cookie 数据发送到浏览器客户端

// resp.setHeader("set-cookie", "name=Jack, age=22");

// 2、从 cookie请求头 中获取 cookie 数据; (第一次执行时,浏览器还没有 cookie,所以获取不到数据)

// String cookie = req.getHeader("cookie");

// System.out.println("cookie: " + cookie);

// 通过 Cookie对象 实现 cookie数据 的发送和接收

// 1、创建 Cookie 对象

Cookie cookie1 = new Cookie("name", "Jack");

Cookie cookie2 = new Cookie("age", "22");

// 2、把 cookie 对象发送到浏览器(自动拼装 set-cookie 响应头)

// 注意:如果存在同名的 cookie 数据,则不会再次发送 cookie。

// 所以在发送同名 cookie 之前,需要先清除浏览器缓存的 cookie 数据。

resp.addCookie(cookie1);

resp.addCookie(cookie2);

// 3、接收浏览器发送的 cookie;(获取的是客户端所有 cookie 的集合)

Cookie[] cookies = req.getCookies();

if (cookies != null) { // 第一次获取不到 cookie

for (Cookie cookie : cookies) { // 遍历 cookie 集合

String name = cookie.getName(); // 获取 cookie 的名字

String value = cookie.getValue(); // 获取 cookie 的值

System.out.println(name + "=" + value);

}

}

}

}

创建的 cookie 信息:

544366e84b3938a2ac2c1bb82c47d3be.png

1f1bbe81a7aa3669122ab3d4c251a411.png

3674969f727c281fc5d2dcfd0353e035.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值