Servlet Cookie基本概念和使用方法

news/2024/5/20 5:11:23/文章来源:https://blog.csdn.net/m0_67906358/article/details/131068385

目录

Cookie 介绍

Cookie 主要有两种类型:会话 Cookie 和持久 Cookie。

Cookie使用步骤

使用Servlet和Cookie实现客户端存储的登录功能示例:

LoginServlet类

index.jsp

删除Cookie

浏览器中查看Cookie的方法


Cookie 介绍

Cookie 是一种在网站和应用程序中用于存储用户信息的小型文本文件。当用户访问一个网站或应用程序时,该网站或应用程序会将一个包含用户信息的 Cookie 发送到用户的浏览器。浏览器会将该 Cookie 存储在用户的计算机上,并在以后的访问中将该 Cookie 发送回网站或应用程序。

虽然 Cookie 对于提供个性化体验和方便用户来说非常有用,但它们也引发了一些隐私和安全问题。例如,第三方 Cookie 可以用于跟踪用户在多个网站上的活动,可能会侵犯用户的隐私。出于隐私和安全的考虑,现代浏览器通常允许用户控制哪些 Cookie 被接受和存储,并提供了清除 Cookie 的选项。

Cookie 主要有两种类型:会话 Cookie 和持久 Cookie。

  • 会话 Cookie:这些 Cookie 在用户关闭浏览器时会被删除。它们主要用于跟踪用户在当前会话中的活动,如用户在网站上浏览的页面、添加到购物车的商品等。
  • 持久 Cookie:这些 Cookie 在用户关闭浏览器后仍然存在,可以在指定的时间段内保留。它们用于存储长期的用户信息,如用户的登录凭据、偏好设置等。

Cookie使用步骤

  1. 创建一个Cookie对象:
Cookie cookie = new Cookie("cookieName", "cookieValue");
  1. (可选)设置Cookie的属性:
cookie.setMaxAge(3600); // 设置Cookie的生存期(以秒为单位),在这个示例中为1小时
cookie.setPath("/"); // 设置Cookie适用的路径,这里是根路径,表示对整个应用程序可见
cookie.setDomain("example.com"); // 设置Cookie适用的域名,例如example.com
cookie.setSecure(true); // 设置Cookie只在通过HTTPS连接时传输
  1. 将Cookie添加到HTTP响应中:

这将在HTTP响应的头部添加一个Set-Cookie标头,告诉客户端保存该Cookie。

response.addCookie(cookie);
  1. 在后续的请求中访问Cookie:

你可以通过request.getCookies()方法获取请求中的所有Cookie对象,并遍历它们以访问每个Cookie的名称和值。

Cookie[] cookies = request.getCookies(); // 获取所有的Cookie对象if (cookies != null) {for (Cookie cookie : cookies) {String name = cookie.getName();String value = cookie.getValue();// 处理Cookie数据}
}

使用Servlet和Cookie实现客户端存储的登录功能示例:

LoginServlet类

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/login")public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 检查用户名和密码是否有效(在此处添加验证逻辑)if (isValidUser(username, password)) {// 创建Cookie对象Cookie userCookie = new Cookie("username", username);// 设置Cookie的生命周期(这里设置为1小时)userCookie.setMaxAge(60 * 60);// 将Cookie添加到响应中response.addCookie(userCookie);response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body>");out.println("<h3>欢迎, " + username + "!</h3>");out.println("</body>");out.println("</html>");} else {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body>");out.println("<h3>登录失败,请检查用户名和密码。</h3>");out.println("</body>");out.println("</html>");}}private boolean isValidUser(String username, String password) {// 在此处进行用户名和密码的验证,可以连接数据库或使用硬编码的方式进行验证// 返回true表示验证通过,返回false表示验证失败// 这里只是一个示例,实际应用中应该使用更安全的验证方式return "A".equals(username) && "123".equals(password);}
}

index.jsp

<html><head><title>登录界面</title><style>body {background-color: #f1f1f1;font-family: Arial, sans-serif;}.container {width: 300px;margin: 0 auto;margin-top: 100px;background-color: #ffffff;padding: 20px;border-radius: 5px;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);}.container h2 {text-align: center;}.container input[type="text"],.container input[type="password"] {width: 100%;padding: 10px;margin-bottom: 20px;border: 1px solid #ccc;border-radius: 4px;}.container input[type="submit"] {width: 100%;padding: 10px;background-color: #4CAF50;border: none;color: #fff;border-radius: 4px;cursor: pointer;}.container input[type="submit"]:hover {background-color: #45a049;}</style></head><body><div class="container"><h2>登录</h2><form action="/login" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="Login"></form></div></body>
</html>

删除Cookie

不设置有效期,关闭浏览器,自动失效;

设置有效期时间为 0 ;

浏览器中查看Cookie的方法

1、谷歌浏览器:

  • 打开Chrome浏览器,并导航到您感兴趣的网站。
  • 点击右上角的菜单图标(三个垂直线点),选择“更多工具”。
  • 在下拉菜单中选择“开发者工具”。
  • 在开发者工具窗口中,选择“应用”选项卡。
  • 在左侧导航栏中,展开“存储”,然后点击“Cookies”。
  • 在右边的面板中,您将看到该网站设置的 Cookie 列表。

2、微软浏览器:

  • 打开Edge浏览器,并导航到您感兴趣的网站。
  • 点击右上角的菜单图标(三个水平点)。
  • 在下拉菜单中选择“更多工具”。
  • 在弹出的菜单中选择“开发人员工具”。
  • 在开发者工具窗口中,选择“应用”选项卡。
  • 在左侧导航栏中,展开“存储”,然后点击“Cookies”。
  • 在右边的面板中,您将看到该网站设置的 Cookie 列表。

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试老鸟总结,自动化测试难点挑战应对方法,我的进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

不定积分练习

不定积分练习 在看视频的时候遇到了一道比较有趣的题&#xff0c;在这里给大家分享一下。 题目 计算 ∫ ( 1 x − 1 x ) e x 1 x d x \int(1x-\dfrac 1x)e^{x\frac 1x}dx ∫(1x−x1​)exx1​dx 解&#xff1a; \qquad 原式 ∫ e x 1 x d x ∫ x ( 1 − 1 x 2 ) e x 1…

Promise-用法

目录 1.处理异步的几种方案 2.理解 3.promise状态&#xff1a;初始化 4.执行异步任务 5.执行异步任务成功 6.执行异步任务失败 7.执行异步任务成功-返回 8.执行异步任务失败-返回 1.处理异步的几种方案 纯粹callback&#xff0c;会剥夺函数return的能力promise&#xf…

【Java基础学习打卡01】计算机概述

目录 引言一、计算机是什么&#xff1f;1.计算机vs计算器2.计算机定义 二、计算机发展简史三、计算机分类四、计算机基本工作原理1.冯诺依曼2.冯诺依曼原理 总结 引言 其实我们在学习Java编程之前应该要对计算机有所了解&#xff0c;这里的了解不是说我们日常接触电脑就算是了…

postgres篇---docker安装postgres,python连接postgres数据库

postgres篇---docker安装postgres&#xff0c;python连接postgres数据库 一、docker安装postgres1.1 安装Docker&#xff1a;1.2 从Docker Hub获取PostgreSQL镜像1.3 创建PostgreSQL容器1.4 访问PostgreSQL 二. python连接postgres数据库2.1 connect连接2.2 cursor2.3 excute执…

docker-compose 搭建 zipkin 服务端

目录 基于docker-compose搭建服务端 数据库 服务器 docker-compose.yaml 问题 测试 基于docker-compose搭建服务端 数据库 我这边存储选择了Mysql存储&#xff0c;新建了 zipkin库&#xff0c;数据库脚本如下 -- -- Copyright 2015-2019 The OpenZipkin Authors -- -- Li…

Springboot3 + SpringSecurity + JWT + OpenApi3 实现认证授权

Springboot3 SpringSecurity JWT OpenApi3 实现双token 目前全网最新的 Spring Security JWT 实现双 Token 的案例&#xff01;收藏就对了&#xff0c;欢迎各位看友学习参考。此项目由作者个人创作&#xff0c;可以供大家学习和项目实战使用&#xff0c;创作不易&#xff…

linux 部署mysql

本文介绍下Centos7中mysql的安装(Centos7以下版本中有些命令和centos7中有些不同&#xff0c;安时需注意下自己的linux版本) 事先准备 1、查看系统中是否自带安装mysql yum list installed | grep mysql ![在这里插入图片描述](https://img-blog.csdnimg.cn/e322b2f4036c4d9…

电力能耗监测系统是如何运作的

电力能耗监测系统数据的采集主要通过多功能仪表、通讯管理机、通讯协议实现能耗数据的采集&#xff0c;能耗数据上传后经大数据计算实现能耗数据的展示&#xff0c;满足用户对能耗监测的需求。下面对电力能耗监测系统的是怎么采集数据的展开介绍&#xff1a; 1.多功能仪表 对高…

中国的互联网技术有多厉害?

1 很多人没有意识到&#xff0c;中国的互联网技术是相当厉害的。 给大家举几个例子。 我和朋友聊天的时候&#xff0c;手机上的app都在“侧耳倾听”&#xff0c;聊天的一些关键字很快就会出现在手机浏览器的搜索栏中。 携程会给我自动推荐景点&#xff0c;美团会给我推荐美食&…

【FLoyd算法(Floyd到底做什么用 进来看看)】牛的旅行【进来学习做一道题的步骤-1.读题根据样例 概括出题意-2.分析算法-3.优化算法】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

混合动力汽车耐久测试

一 背景 整车厂可通过发动机和电机驱动的结合为多款车型提供混合动力驱动技术。汽车集成电机驱动可大大减少二氧化碳的排放&#xff0c;不仅如此&#xff0c;全电动驱动或混合动力驱动的汽车还将使用户体验到更好的驾驶感受&#xff0c;且这种汽车可通过电动机来实现更快的加速…

操作系统原理 —— 内存覆盖与交换(十九)

什么情况下需要覆盖与交换 要弄清楚什么是覆盖与交换的概念&#xff0c;首先我们要知道在什么情况下才会使用到覆盖与交换。 在早期的计算机内存很小的时候&#xff0c;比如 IBM 推出的第一台 PC 机最大只支持 1 MB 大小的内存&#xff0c;因此会经常出现内存大小不够的情况&…

Dell服务器安装Ubuntu系统

1、下载镜像&#xff0c;做启动盘 镜像链接 http://old-releases.ubuntu.com/releases/20.04.2/ubuntu-20.04.2-live-server-amd64.iso 版本可以根据自己要求选择。 做启动盘 我用的是ultraiso 记得先格式化&#xff0c;再写入。 2、 设置BIOS启动 按F11&#xff0c;进入BIOS…

708教室使用方法

一、教室平面图 708教室的布局如下&#xff0c;重要的设备已经在图中标出。总开关、一体机和机柜。   二、使用方法 2.1 房间机器上电 进门后首先走到“总开关位置”&#xff0c;将电匝闭合。 原来的开关如图所示&#xff0c;有3组开关&#xff0c;1号组开关用于控制插座、…

Linux工具之htop(含移植到arm-linux系统)

文章目录 介绍安装使用一些参数讲解功能键说明一些快捷键一些指令参数 拓展&#xff1a;Linux进程PRI与NI值拓展&#xff1a;VIRT(虚拟内存)RES(常驻内存)和SHR(共享内存)拓展&#xff1a;编译成应用放到开发板上使用源码下载解压编译 介绍 Htop是一个免费的&#xff08;GPL&a…

spring实例化bean之实例化

1.关键方法createBean doGetBean中调用getSingleton方法中调用singletonFactory.getObject()触发lambda表达式中的createBean方法 AbstractAutowireCapableBeanFactory#createBean protected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] …

不愧是华为出来的,太强了。。。

前言 实习去了博彦科技&#xff08;外包&#xff09;&#xff0c;做的就是螺丝钉的活&#xff0c;后面还因为人效不佳&#xff0c;被开了。 正式毕业后去了另外一个做电子发票的公司&#xff0c;但是都是功能测试和一点点APP测试&#xff0c;然后经常被开发怼&#xff0c;测试…

Redis进阶:缓存穿透|缓存击穿|缓存雪崩问题

Redis应用问题 1. 缓存穿透问题1.1 问题描述1.2 解决方案方法一&#xff1a;空值缓存方法二&#xff1a;设置可访问的名单&#xff08;白名单&#xff09;方法三&#xff1a;采用布隆过滤器方法四&#xff1a;进行实时监控 2. 缓存击穿问题2.1 问题描述2.2 解决方案方法一&…

谷歌浏览器Software Reporter Tool长时间占用CPU解决办法

如下图所示&#xff0c;大家是否在使用谷歌浏览器的过程中发现CPU风扇狂转&#xff0c;打开任务管理器发现一个名为software_reporter_tool.exe的软件占用了一半的CPU资源&#xff01;这简直不能忍&#xff0c;按照下面教程&#xff0c;可以解决这个令人苦恼的问题。 什么是Sof…