Cookie | Cookie的理论基础、Cookie中常用的方法

news2024/11/20 18:28:50

目录

一:Cookie的理论基础

二:Cookie中常用的方法


一:Cookie的理论基础

(1)cookie怎么生成?

①session的实现原理中,每一个session对象都会关联一个sessionid,例如:JSESSIONID=41C481F0224664BDB28E95081D23D5B8 ,这个键值对数据其实就是cookie对象

②对于session关联的cookie来说,这个cookie是被保存在浏览器的“运行内存”当中 。只要浏览器不关闭,用户再次发送请求的时候,会自动将运行内存中的cookie发送给服务器 。

③例如,这个Cookie: JSESSIONID=41C481F0224664BDB28E95081D23D5B8,用户再次发送请求就会将这个Cookie再次发送给服务器。服务器就是根据41C481F0224664BDB28E95081D23D5B8这个id值来找到对应的session对象的。

(2)cookie保存在什么地方?

cookie最终是保存在浏览器客户端上的:

①可以保存在运行内存中。(浏览器只要关闭cookie就消失了)

②也可以保存在硬盘文件中。(永久保存)

(3)cookie的作用?

cookie和session机制其实都是为了保存会话的状态。

cookie是将会话的状态保存在浏览器客户端上。(cookie数据存储在浏览器客户端上的)

session是将会话的状态保存在服务器端上。(session对象是存储在服务器上)

为什么要有cookie和session机制呢?因为HTTP协议是无状态 无连接协议。

(4)cookie的经典案例?

案例1:以前京东商城,在未登录的情况下,向购物车中放几件商品。然后关闭商城,再次打开浏览器,访问京东商城的时候,购物车中的商品还在,这是怎么做的?我没有登录,为什么购物车中还有商品呢?

①将购物车中的商品编号放到cookie当中,cookie保存在硬盘文件当中这样即使关闭浏览器,硬盘上的cookie还在。下一次再打开京东商城的时候,查看购物车的时候,会自动读取本地硬盘中存储的cookie,拿到商品编号,动态展示购物车中的商品。

②京东存储购物车中商品的cookie可能是这样的:productIds=xxxxx,yyyy,zzz,kkkk....

注意:cookie如果清除掉,购物车中的商品就消失了。

案例2:126邮箱中有一个功能:十天内免登录

①用户输入正确的用户名和密码,并且同时选择十天内免登录。登录成功后。浏览器客户端会保存一个cookie,这个cookie中保存了用户名和密码等信息,这个cookie是保存在硬盘文件当中的,十天有效。在十天内用户再次访问126的时候,浏览器自动提交126的关联的cookie给服务器,服务器接收到cookie之后,获取用户名和密码,验证通过之后,自动登录成功。

怎么让cookie失效?         

  • 或者改密码

  • 或者在客户端浏览器上清除cookie(ctrl+shift+delete清除缓存)

(5)cookie机制和session机制其实都不属于java中的机制

①实际上cookie机制和session机制都是HTTP协议的一部分。php开发中也有cookie和session机制,只要是是做web开发,不管什么编程语言,cookie和session机制都是需要的。

HTTP协议中规定:任何一个cookie都是由name和value组成的,name和value都是字符串类型的

(6)在java的servlet中,对cookie提供了哪些支持呢?

①提供了一个Cookie类来专门表示cookie数据:javax(jakarta).servlet.http.Cookie;

②java程序怎么把cookie数据发送给浏览器呢?response.addCookie(cookie);

③在HTTP协议中规定的:当浏览器发送请求的时候,会自动携带该path(URL) 下的cookie数据给服务器。

二:Cookie中常用的方法

(1)创建Cookie对象,并放入浏览器

点击超链接,发送请求生成Cookie对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page session="false" %>
<html>
  <head>
    <title>cookie</title>
  </head>
  <body>
    <a href="<%=request.getContextPath()%>/cookie/generate">服务器生成cookie,然后将cookie响应给浏览器,浏览器接收cookie,将cookie放到客户端上</a>
    <br>
    <a href="<%=request.getContextPath()%>/sendCookie">浏览器发送cookie给服务器</a>
  </body>
</html>

①先创建Cookie对象,只有有参构造方法(没有无参构造),传过去name和value 

②然后调用response的addCookie方法,把Cookie对象放进去响应到浏览器

 // 创建Cookie对象
  Cookie cookie = new Cookie("product", "123456");
 // 将Cookie响应到浏览器
  response.addCookie(cookie);

打开浏览器的调试窗口进行测试:

(2)设置cookie的有效时间

①怎么用java设置cookie的有效时间 ?

调用cookie的setMaxAge(时间)方法设置cookie的有效时间,以秒为单位

没有设置有效时间:默认保存在浏览器的运行内存中,浏览器关闭则cookie消失。

   只要设置cookie的有效时间 > 0,这个cookie一定会存储到硬盘文件当中。

情况一:设置cookie的有效时间(时间>0,保存在硬盘文件当中)

 cookie.setMaxAge(60*60);

情况二:设置cookie的有效时间(时间=0,删除cookie)

设置cookie的有效期为0,表示该cookie删除,主要应用在删除浏览器上的同名cookie

cookie.setMaxAge(0);

情况三:设置cookie的有效时间(时间<0,和不设置同样的效果)

设置cookie的有效期<0,表示该cookie不会被存储到硬盘文件中,存放在浏览器运行内存当中;实际上和不调用setMaxAge是一个效果

cookie.setMaxAge(-1);

(3)cookie关联的路径:

(1)假设现在发送的请求路径是“http://localhost:8080/servlet13/cookie/generate”生成的cookie,如果cookie没有设置path,默认的path是:http://localhost:8080/servlet13/cookie 以及它的子路径; 所以以后只要浏览器的请求路径是http://localhost:8080/servlet13/cookie 这个路径以及这个路径下的子路径(就算子路径资源不存在,报404错误),cookie都会被发送到服务器。

(2)手动设置cookie的path;例如:手动设置path就是项目名cookie.setPath(request.getContextPath());表示只要是这个servlet13项目的请求路径,都会提交这个cookie给服务器。

(3)浏览器发送cookie给服务器了,服务器中的java程序怎么接收?

通过调用request对象的getCookies()方法,接收到浏览器发送过来的cookie。

注意细节:这个方法可能会返回null;如果浏览器没有提交cookie,这个方法返回值是null,并不是返回一个长度为0的数组!        

点击前面写的index.jsp页面:

①发送/cookie/generate请求,服务器创建cookie对象,并放入浏览器

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

/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.javaweb.cookie
 * @Project:JavaWeb
 * @name:GenerateCookie
 * @Date:2022/11/30 14:55
 */
@WebServlet("/cookie/generate")
public class GenerateCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 创建Cookie对象
        Cookie cookie = new Cookie("product", "123456");
        Cookie cookie2 = new Cookie("root", "456789");

        // 设置cookie的有效时间,以秒为单位(保存在硬盘文件当中)
        cookie.setMaxAge(-1);
        cookie2.setMaxAge(-1);

        // 设置cookie关联的路径就是根路径
        cookie.setPath(request.getContextPath());
        cookie2.setPath(request.getContextPath());

        // 将Cookie响应到浏览器
        response.addCookie(cookie);
        response.addCookie(cookie2);

    }
}

②发送/sendCookie请求,服务器从浏览器接收cookie对象

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

/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.javaweb.cookie
 * @Project:JavaWeb
 * @name:ReceiveCookie
 * @Date:2022/11/30 16:03
 */
@WebServlet("/sendCookie")
public class ReceiveCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                // 获取cookie的name和value
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name + "=" + value);
            }
        }
    }
}

③运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中创软件递交上会稿:年营收不到2亿 税收优惠占利润比高

雷递网 雷建平 12月10日山东中创软件商用中间件股份有限公司&#xff08;简称&#xff1a;“中创软件”&#xff09;日前递交上会稿&#xff0c;准备在科创板上市。中创软件计划募资6亿元&#xff0c;其中&#xff0c;2.3亿元用于应用基础设施及中间件研发项目&#xff0c;1.3亿…

开源一个各种USB电缆的测试仪,再也不用担心被只有充电功能的数据线坑了

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;01 想知道你的USB Type C数据线是USB2或者USB3吗&#xff1f;大家是否有一些仅有充电功能的USB数据线在你的抽屉里&#xff0c;等待某个…

量子计算(十三):量子计算的if和while

文章目录 量子计算的if和while 一、基于测量的跳转 二、基于量子信息的IF和WHILE 量子计算的if和while 所谓量子线路&#xff0c;从本质上是一个量子逻辑门的执行序列&#xff0c;它是从左至右依次执行的。即使介绍了函数调用的思想&#xff0c;也可以理解为这是一种简单地…

10-11-12 - 实模式到保护模式

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 从计算机的历史谈起2. 绝对的权利带来的问题3. CPU历史的里程碑 - 80863.1 深入解析 [段地址 : 偏移地址]3.1.1 示例3.1.2 问题3.2 8086时期应用程序中的问题3.3 思考4. 80286的登场4.1 80286的兼容性4.2 初识保护模式4.2.1 描述…

JDBC连接数据库详解~

课前导读&#xff1a; 本文章有关JDBC连接数据库的操作&#xff0c;其中涉及了编译器idea的使用&#xff0c;其中连接的数据库为MySQL数据库&#xff0c;通过博主自己的学习和总结写出了下面的文章。 目录 课前导读&#xff1a; 一、JDBC简介 二、JDBC连接操作 三、源码提供…

数素数

目录 1013 数素数 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码长度限制: 时间限制: 内存限制: 思路: 1.判断素数 1.2素数判断代码: 2.数组存素数 2.2存素数代码: 3.输出Pm到Pn的全部素数 3.2代码 总代码: 总结: 题目…

Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 1.4.4 通用操作系统 1.4.5 单用户操作系统

非零基础自学计算机操作系统 文章目录非零基础自学计算机操作系统第1章 操作系统概述1.4 操作系统的分类1.4.3 实时操作系统1.4.4 通用操作系统1.4.5 单用户操作系统第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 所谓实时&#xff0c;是指系统能够对外部请求做…

R语言多重比较方法

假设检验的基本原理是小概率原理&#xff0c;即我们认为小概率事件在一次试验中实际上不可能发生。 多重比较的问题 当同一研究问题下进行多次假设检验时&#xff0c;不再符合小概率原理所说的“一次试验”。如果在该研究问题下只要有检验是阳性的&#xff0c;就对该问题下阳性…

c#入门-静态引用,扩展方法

静态引用 声明静态引用 引用命名空间时&#xff0c;可以在using后面加static修饰符。 然后把要引用的命名空间改为带命名空间的一个具体的类。 这称为静态引用。 using static System.Int32; using static System.Console; int a Parse(ReadLine());静态引用的效果 静态引…

VRC改模从入门到入门

第一步入门 从unity开始 bilibili超细心的unity入门教程 虽然视频很长&#xff0c;但是从p1看到p41就行&#xff0c;脚本部分完全不需要看&#xff0c;因为vrc上传会过滤掉不是他们的脚本的。 unity下载一定要下载2019.4.31f1版本&#xff0c;哔哩哔哩教程有下载unity对应版本…

基于Android的外卖App系统设计

基于Android的外卖App系统设计 摘要 随着智能手机的快速普及&#xff0c;智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务&#xff0c;一种高效的办法就是将应用系统的功能拓展到手机终端上&#xff0c;让手机能够通过移动网以及互联网…

CentOS 安装 mysql 8.0

目录 下载 安装步骤 上传 解压安装 参考资料 补充报错解决 下载 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 安装步骤 上传 使用xshell&#xff0c;连接服务器&#xff0c;用 rz命令接收下载的文件&#xff08;该命令使用 yum…

Linux 文件属性

Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命…

LeetCode Hot 100~Day1

目录 两数之和 两数相加 无重复字符的最长子串 最长回文子串 盛最多水的容器 删除链表的倒数第n个节点 合并两个有序链表 有效的括号 两数之和 题目链接&#xff1a;1.两数之和 示例 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[0,1] 解释…

ADI Blackfin DSP处理器-BF533的开发详解33:数字信号处理详解-FFT(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 FFT&#xff08;Fast Fourier Transformation&#xff09;&#xff0c;即为快速傅氏变换&#xff0c;是离散傅氏变换的快速算法&#x…

web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

介绍 本文并不表示R在数据分析方面比Python更好或更快速&#xff0c;我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。 本文中的 数据 每天都会更新&#xff0c;我的文件版本更大&#xff0c;为4.63 GB。 CSV文件包含纽约市的311条投诉。它是纽约市开放…

MySQL 数据库 C/C++ 常用函数

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型&#xff0c;全称为"聊天式自动回复生成技术"&#xff08;Chat-based Automatic Reply Generation Technology&#xff09;&#xff0c;用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的&#xff0c;具…