Servlet Cookie基本概念和使用方法

news2024/11/26 14:37:23

目录

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.coloradmin.cn/o/616009.html

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

相关文章

win10下载安装mysql8.0版本

打开官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载完成后解压&#xff0c;这里我是直接放在C盘 然后打开mysql目录文件夹新建my.ini文件,my.ini文件内容如下&#xff0c;需要修改两个地方&#xff0c;其中datadir你自己的mysql的安装目录&#xff0c;data…

如何在线压缩png图片?png压缩图片大小的方法介绍

压缩PNG图片大小的优点 随着数字化时代的发展&#xff0c;PNG格式已成为一种常见的图片格式。然而&#xff0c;由于高分辨率、高色深等原因&#xff0c;PNG图片通常具有较大的文件体积&#xff0c;导致在传输、存储和网页加载等方面会产生不必要的负担。因此&#xff0c;对于需…

ai绘画生成古风场景怎么弄?告诉你怎么ai绘画

随着人工智能技术的不断发展&#xff0c;ai绘画已经成为一个令人着迷的领域。一些软件利用深度学习算法和生成对抗网络等技术&#xff0c;能够帮助艺术家和爱好者创造出令人惊叹的艺术作品。今天我就来跟大家分享一下如何一键ai绘画&#xff0c;感兴趣的朋友就跟我一起看下去吧…

《文体用品与科技》期刊简介及投稿要求

《文体用品与科技》期刊简介&#xff1a; 主管单位&#xff1a;中国轻工业联合会 主办单位&#xff1a;中国文教体育用品协会、全国文教体育用品信息中心、北京市文教体育用品研究所 国际刊号&#xff1a; ISSN1006-8902 国内刊号;CN:11-3762/TS 邮发代号;82-21932 发表周…

DDR跑不到速率后续来了,相邻层串扰深度分析!

高速先生成员&#xff1a;黄刚 就在刚刚&#xff0c;雷豹把他对叠层的调整方式和改善后的仿真结果给师傅Chris看完后&#xff0c;Chris给雷豹点了个大大的赞&#xff0c;因为优化的方式其实不需要大改DDR的走线&#xff0c;只需要把相邻层的信号最大限度的拉开&#xff0c;同时…

如何定位分析视频异常画面

背景 视频典型画面不正常主要包含画面卡顿、画面模糊、画面不显示、画面花屏这 4 类问题。本文主要介绍的是画面花屏的情况&#xff0c;这里的画面花屏包含了花屏、闪屏、绿屏、黑屏。视频花屏是多媒体工程师最常见的问题之一&#xff0c;也是最棘手的问题之一&#xff0c;笔者…

有什么可靠稳定的微信管理系统?

微信管理系统是什么 微信管理系统从字面上来说可以理解为微信的管理和营销系统。通俗一点来说就是利用微信与管理营销相结合的一种新型办公方式。 不用下载任何软件&#xff0c;不用多部手机&#xff0c;对手机没有任何型号要求&#xff0c;不需要刷机、越狱&#xff0c;不需…

政务APP小程序开发 畅享全新政府办事体验

现在很多政府机构打着便民的口号&#xff0c;但其实生活中很多时候去政府机构办事都很费时间&#xff0c;周末节假日不上班没法办理&#xff0c;工作日去人多排长队不说&#xff0c;往往排到自己了又因为资料不全、手续不齐&#xff0c;无法证明自己等奇葩原因不得不一次次被拒…

boost 搜索引擎

boost搜索引擎 01 项目演示 done 02 讲解思路 03 项目背景 公司&#xff1a;百度、搜狗、360搜索、头条新闻客户端 - 我们自己实现是不可能的&#xff01; 站内搜索&#xff1a;搜索的数据更垂直&#xff0c;数据量其实更小 boost的官网是没有站内搜索的&#xff0c;需要…

家乡乐山美食网站系统(含源码+数据库)

1.需求分析 将进行家乡乐山美食网站的需求分析。需求分析是系统开发过程中的一项重要工作&#xff0c;它是对用户需求进行深入研究和分析&#xff0c;明确系统的功能、性能、界面等方面的需求&#xff0c;为后续的设计和开发提供依据。 首先&#xff0c;需要明确该网站的主要目…

成为一个优秀的测试工程师需要具备哪些知识和经验?

目录 前言&#xff1a;  1、我们先来讲第一点&#xff0c;由单纯的测试变成项目质量保证工作 2、持续集成探索和自动化测试技术研究 3、测试相关工具的开发 总结忠告 前言&#xff1a;  本人7年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;…

狂野java前置课程-线程池的基本使用

回顾 什么是线程&#xff0c;什么是进程&#xff1f; 进程&#xff1a;是一个应用程序&#xff0c;里面包含很多线程线程&#xff1a;进程执行的基本单元 java实现线程的几种方式 继承Thread类实现Runable接口 线程的生命周期 执行线程会出现的问题 一个线程只能执行一个…

【专为苛刻的数据环境而构建】上海道宁为您带来世界上先进的矢量原生、时间序列和实时分析数据库——kdb系列产品

kdb是高效的矢量原生 时间序列和实时分析数据库 专为高性能矢量 数据驱动的应用程序而构建 以加速云端、数据仓库和 数据湖中的 AI 和 ML 工具 从而更快、更高效地 制定业务决策 使用数据时间库加速数据 分析和生成 AI 管道 以降低成本 提高性能并提高效率 开发商介绍…

移动端图形API通讲(一)--从Gles、Vulkan到Metal

转载请注明&#xff0c;来自leonnwei的csdn blog 引言 一直想整理下关于移动端图形编程API的文档。图形API为何重要&#xff1f;如果说图形编程的内功是计算机图形学的诸原理和算法&#xff0c;那么外功就是实实在在的硬件API。不能精通API的使用&#xff0c;就无法把渲染特性合…

新来个技术总监,把限流实现的那叫一个优雅,佩服!

在电商高并发场景下&#xff0c;我们经常会使用一些常用方法&#xff0c;去应对流量高峰&#xff0c;比如限流、熔断、降级&#xff0c;今天我们聊聊限流。 什么是限流呢&#xff1f;限流是限制到达系统的并发请求数量&#xff0c;保证系统能够正常响应部分用户请求&#xff0…

人脸比对指标 -- 人脸相似度

目前市面上既有OpenCV等开源算法库&#xff0c;很多芯片厂商的产品也自带简单算法&#xff0c;同时专业算法大厂也会开放相关技术&#xff0c;如提供免费、离线人脸识别SDK的虹软视觉开放平台等。对于开发者而言&#xff0c;面对多种算法&#xff0c;如何进判断算法性能至关重要…

Vue初始化项目加载逻辑

Vue初始化项目加载逻辑 项目创建 我们只需要创建项目即可&#xff0c;剩余的依赖都没必要安装 我们先来看main.js,咱们加了一行备注 import Vue from vue import App from ./App.vue import router from ./router import store from ./storeVue.config.productionTip fals…

汇众智,奔涌向前赢未来 | 2023开放原子全球开源峰会 OpenAtom openEuler 分论坛即将启幕

OpenAtom openEuler&#xff08;以下简称“openEuler”&#xff09;自 2021 年贡献给开放原子开源基金会后&#xff0c;步入高速发展阶段&#xff0c;社区每日活跃开发者近 4000 人&#xff0c;新增讨论 2168 次&#xff0c;代码合入 127 个、软件包 31 个&#xff1b;每月新增…

【python】之cowsay库,打印图案!

以前经常看到互联网大佬的Linux shell脚本启动的时候显示一副炫酷的字符画面&#xff0c;逼格瞬间提升一个档次&#xff0c;按说字符拼画也不是什么难事&#xff0c;只要有时间、有耐心(然鹅大部分人这两样都没有)。 网上流传着一个很老的库cawsay牛说。cowsay是一个生成ASCII…

MMDection学习记录(一)之环境配置

Linux下环境配置 创建环境并激活 conda create --name openmmlab python3.7 -y conda activate openmmlab安装Pytorch 建议使用pip命令安装&#xff0c;否则会报错&#xff1a; symbol free_gemm_select version libcublasLt.so.11 not defined in file libcublasLt.so.11 w…