热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Javaweb学习笔记之Cookie(一):Cookie的使用(原理)

Javaweb学习笔记之Cookie(一):Cookie的使用(原理),Go语言社区,Golang程序员人脉社
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 信息:

 


推荐阅读
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • PHP中函数名、常量名和变量名大小写转换及规范详解
    在PHP编程中,初学者常常会遇到关于函数名、常量名和变量名大小写的问题。本文详细解析了PHP中这些名称的大小写敏感性及其命名规范,帮助开发者更好地理解和使用PHP。具体而言,文章探讨了PHP中的常量名是否区分大小写,自定义函数名的大小写敏感性,以及类名的大小写规则。此外,还提供了实用的代码示例和最佳实践,以确保代码的可读性和一致性。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
author-avatar
闲云野鹤-男主角_185
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有