Cookie、Kaptcha

目录

一、本质

二、Cookie在浏览器和服务器之间的传递

1.没有Cookie的状态

2.创建Cookie对象并返回

三、Cookie时效性

1.理论

2.代码

3.会话和持久化Cookie对比

四、Cookie的domain和path

五、Cookie的应用

六、Kaptcha

1.为什么需要验证码?

2.Kaptcha如何使用?

kaptcha.jar链接

3.Kaptcha验证码图片的各个属性

4.KaptchaServlet生成验证


一、本质

  • 在浏览器端临时存储数据
  • 键值对
  • 键和值都是字符串类型
  • 数据量很小

二、Cookie在浏览器和服务器之间的传递

1.没有Cookie的状态

在服务器端没有创建Cookie并返回的情况下,浏览器端不会保存Cookie信息。双方在请求和响应的过程中也不会携带Cookie的数据。

2.创建Cookie对象并返回

  • 创建Cookie对象
  • 在客户端保存Cookie
  • 页面跳转
package com.atguigu.cookois.servlet;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;@WebServlet("/cookie01")
public class CookieServlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.创建一个Cookie对象Cookie cookie = new Cookie("uname","jim");//2.将这个Cookie对象保存在浏览器端response.addCookie(cookie);//3.页面跳转request.getRequestDispatcher("hello01.html").forward(request,response);}
}

三、Cookie时效性

1.理论

  • 会话级Cookie
    • 服务器端并没有明确指定Cookie的存在时间
    • 在浏览器端,Cookie数据存在于内存中
    • 只要浏览器还开着,Cookie数据就一直都在
    • 浏览器关闭,内存中的Cookie数据就会被释放
  • 持久化Cookie
    • 服务器端明确设置了Cookie的存在时间
    • 在浏览器端,Cookie数据会被保存到硬盘上
    • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响
    • 持久化Cookie到达了预设的时间会被释放

服务器端返回Cookie时附带过期时间的响应消息头如下:

服务器通知浏览器删除Cookie时的响应消息头如下:

2.代码

// ※给Cookie设置过期时间
// 正数:Cookie的过期时间,以秒为单位
// 负数:表示这个Cookie是会话级的Cookie,浏览器关闭时释放
// 0:通知浏览器立即删除这个Cookie
cookie.setMaxAge(20);

3.会话和持久化Cookie对比

四、Cookie的domain和path

上网时间长了,本地会保存很多Cookie。对浏览器来说,访问互联网资源时不能每次都把所有Cookie带上。浏览器会使用Cookie的domain和path属性值来和当前访问的地址进行比较,从而决定是否携带这个Cookie。

五、Cookie的应用

  1. 记住用户名密码十天:setMaxAge(60*60*24*10)
  2. 十天免登录

六、Kaptcha

1.为什么需要验证码?

  • 防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登录、灌水。
  • 有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试

2.Kaptcha如何使用?

①添加jar包

kaptcha.jar链接

链接:https://pan.baidu.com/s/1G_6RBPSJx_n4Dd70rT215A?pwd=7dpm 
提取码:7dpm

②在web.xml文件中注册KaptchaServlet,并设置验证码图片的相关属性

③在html页面上编写一个标签,然后设置src等于KaptchaServlet对应的url-pattern

3.Kaptcha验证码图片的各个属性

在常量接口:Constants中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>KaptchaServlet</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class><init-param><param-name>kaptcha.border.color</param-name><param-value>blue</param-value>
<!--            边框颜色              --></init-param><init-param><param-name>kaptcha.textproducer.char.string</param-name><param-value>abcdefg</param-value>
<!--            在abcdefg范围内选择字符              --></init-param></servlet><servlet-mapping><servlet-name>KaptchaServlet</servlet-name><url-pattern>/kaptcha.jpg</url-pattern></servlet-mapping>
</web-app>
public class Constants {public static final String KAPTCHA_SESSION_KEY = "KAPTCHA_SESSION_KEY";public static final String KAPTCHA_SESSION_DATE = "KAPTCHA_SESSION_DATE";public static final String KAPTCHA_SESSION_CONFIG_KEY = "kaptcha.session.key";public static final String KAPTCHA_SESSION_CONFIG_DATE = "kaptcha.session.date";public static final String KAPTCHA_BORDER = "kaptcha.border";public static final String KAPTCHA_BORDER_COLOR = "kaptcha.border.color";public static final String KAPTCHA_BORDER_THICKNESS = "kaptcha.border.thickness";public static final String KAPTCHA_NOISE_COLOR = "kaptcha.noise.color";public static final String KAPTCHA_NOISE_IMPL = "kaptcha.noise.impl";public static final String KAPTCHA_OBSCURIFICATOR_IMPL = "kaptcha.obscurificator.impl";public static final String KAPTCHA_PRODUCER_IMPL = "kaptcha.producer.impl";public static final String KAPTCHA_TEXTPRODUCER_IMPL = "kaptcha.textproducer.impl";public static final String KAPTCHA_TEXTPRODUCER_CHAR_STRING = "kaptcha.textproducer.char.string";public static final String KAPTCHA_TEXTPRODUCER_CHAR_LENGTH = "kaptcha.textproducer.char.length";public static final String KAPTCHA_TEXTPRODUCER_FONT_NAMES = "kaptcha.textproducer.font.names";public static final String KAPTCHA_TEXTPRODUCER_FONT_COLOR = "kaptcha.textproducer.font.color";public static final String KAPTCHA_TEXTPRODUCER_FONT_SIZE = "kaptcha.textproducer.font.size";public static final String KAPTCHA_TEXTPRODUCER_CHAR_SPACE = "kaptcha.textproducer.char.space";public static final String KAPTCHA_WORDRENDERER_IMPL = "kaptcha.word.impl";public static final String KAPTCHA_BACKGROUND_IMPL = "kaptcha.background.impl";public static final String KAPTCHA_BACKGROUND_CLR_FROM = "kaptcha.background.clear.from";public static final String KAPTCHA_BACKGROUND_CLR_TO = "kaptcha.background.clear.to";public static final String KAPTCHA_IMAGE_WIDTH = "kaptcha.image.width";public static final String KAPTCHA_IMAGE_HEIGHT = "kaptcha.image.height";public Constants() {}
}

4.KaptchaServlet生成验证码

KaptchaServlet在生成验证码图片时,会同时将验证码信息保存到session中,因此,我们在注册请求时,首先将用户文本框中输入的验证码值和session中保存的值进行比较,相等则进行注册

@WebServlet("/kaptcha01")
public class KaptchaServletDemo01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession();Object obj = session.getAttribute("KAPTCHA_SESSION_KEY");System.out.println(obj);//ceebd}
}

控制台输出结果 

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

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

相关文章

java验证码kaptcha_spring整合kaptcha验证码的实现

kaptcha简介: kaptcha是一个很有用的验证码生成工具&#xff0c;由于它有许多可配置项&#xff0c;所以用它可以简单快捷的生成各式各样的验证码。 开发工具及使用的核心技术: 1、eclipse 2、mybatis 3、spring 4、springmvc 5、kaptcha 本文将介绍kaptcha两种使用方式: 方式一…

SpringBoot 整合 kaptcha + redis 实现 图形验证码登录

一、新建一个SpringBoot 项目&#xff0c;springboot项目创建过程详见 mac idea 创建 springboot 项目_JAVA&#xff24;WangJing的博客-CSDN博客_mac idea创建springboot项目 二、SpringBoot 整合使用 Rdis SpringBoot 项目 添加 redis配置_JAVA&#xff24;WangJing的博客…

10.20扫雷

扫雷 1.构建主函数,方法与三子棋雷同,但是有很多不一样的地方,就是需要构建两个二维数组,一个存放雷的数据,一个存放展现给玩家的数据棋盘 2.在对棋盘分别初始化 时候,考虑到两个二维数组存放内容不同,直接对初始化函数进行添加字符参数 3.构建参数 因为考虑到后期排查雷的时…

扫雷游戏

游戏设计 1.设计两个二维数组的面板&#xff0c;一个是展示给用户使用的&#xff0c;另一个是雷区的面板 2.初始化两个面板&#xff0c;用户使用的面板初始化为‘’&#xff0c;雷区的面板全部初始化为‘0’ 3.设置你所需要的雷区 4.用户输入坐标&#xff0c;进行判断。越界重新…

【180720】微软Windows扫雷游戏代码

源码简介 本源码是一个微软Windows扫雷游戏代码&#xff0c;可选择难度级别&#xff1a;初级、中级、高级。 注意事项: 1、开发环境为Visual Studio 2010&#xff0c;使用.net 2.0开发。 源码下载地址&#xff1a;点击下载 备用下载地址&#xff1a;点击下载

扫雷win10_windows扫雷游戏原来是一道数学难题!

各位同学大家好&#xff0c;这里是质心数学游戏科普频道。 今天和大家聊的是一款有点复古的windows系统自带小游戏——MineSweeper&#xff08;扫雷&#xff09;。 我刚接触这款游戏是高中的上机课&#xff0c;当时的电脑系统还是win95&#xff0c;在大家还不会局域网互联打Sta…

【扫雷】游戏

一、目的 实现一个扫雷游戏 二、过程 1、游戏框架 首先&#xff0c;游戏开始之前&#xff0c;显示游戏菜单Menu() static void Menu() {printf("#############################\n");printf("########欢迎来到扫雷游戏#######\n");printf("######…

扫雷1.0

目录 一.规则介绍 二.基本思路 三.代码实现 一.规则介绍 扫雷是一个经典的游戏&#xff0c;一张棋盘中有许多不确定是雷还是安全区域的格子&#xff0c;当点击之后若没雷则会在该区域显示周围八个格子雷瑟数目&#xff0c;若踩雷则游戏结束。 二.基本思路 1.创建菜单 2.…

扫雷win10_厉害了,一个自动扫雷游戏项目!

转载自公众号【视学算法】 原文&#xff1a;https://www.cnblogs.com/chestnut-egg/p/9302238.html 自动扫雷一般分为两种&#xff0c;一种是读取内存数据&#xff0c;而另一种是通过分析图片获得数据&#xff0c;并通过模拟鼠标操作&#xff0c;这里我用的是第二种方式。 一、…

RK3566 ALC5616录音调试

1.硬件原理图 MIC_P&#xff0c;MIC_N&#xff1a;mic输入。 I2S&#xff1a;总共有5根线&#xff08;这里不是指 i2s 标准接口&#xff09;&#xff1a;两根音频数据线&#xff08;输入/输出&#xff09;、三根时钟线 其中&#xff1a; I2S_LRCK 是指示当前数据线传输的是左声…

comsol with matlab联合仿真

目前网上的教程基本上只有如何找到comsol with Matlab以及如何打开&#xff0c;和部分代码的讲解&#xff0c;但是要真正的跑起来还有一些步骤&#xff0c;小白在这里跟大家分享一下&#xff0c;不对轻喷&#x1f97a; 1.comsol文件需要连接到服务器comsol multiphysics serve…

COMSOL6.0软件安装说明+视频教程

链接&#xff1a;https://pan.baidu.com/s/1a_BaY6K-fP0PiMhcw5eLcg?pwd6iis 提取码&#xff1a;6iis 首先用虚拟光驱加载或者用winrar直接解压镜像文件&#xff0c;再双击setup.exe程序&#xff0c;选择简体中文语言&#xff1b; 2.选择新安装&#xff1b; 3.选择你要安装…

COMSOL 5.2安装教程(自用)

3、允许用户协议&#xff0c;将许可证格式修改为“许可证文件”&#xff0c;然后点击浏览载入安装包中“_SolidSQUAD_”目录下的“Comsol52_SSQ.lic” 电磁 AC/DC 模块RF 模块波动光学模块射线光学模块等离子体模块半导体模块 结构力学 & 声学 结构力学模块非线性结构材料模…

COMSOL在云平台的使用教程,超高效的方法来了

在北鲲云超算平台上有多种COMSOL作业提交方式&#xff0c;这里给大家演示的是图形界面提交 在平台上使用图形界面提交超级简单&#xff0c;平台已内置模板&#xff0c;只需按照提示上传文件及选择选项即可&#xff0c;对于没有代码基础的同学来说&#xff0c;这是最推荐的方式…

EDA安装------Centos7 安装Comsol5.5

目录 1.引言2.资源3.安装4.结语 1.引言 由于项目需求&#xff0c;博主最近要做微流控通道的流体仿真&#xff0c;对于一个小白来说&#xff0c;首先就是安装仿真软件了。据目前所知&#xff0c;流体仿真大多数使用Ansys的Fluent或CFX、Comsol两个软件。经过网上查询&#xff0…

页眉如何设置成一页左一页右?页码如何设置成一页左一页右?

WPS页眉如何设置成一页左一页右&#xff1f;页码如何设置成一页左一页右&#xff1f;

WPS页眉不同页之间的修改

1-打开WPS 2-建立第一页的页眉 3-点击第二页的页眉 4-点击一下&#xff0c;取消“同前节” 5-编辑第二页的页眉 6-如果后续不修改&#xff0c;那么后面的页眉应是第二页的页眉

WPS的页眉设置

设置步骤如下 首先点开显示段落标记&#xff0c;这样更方便看到分节符&#xff1a; 在每页文字的最后插入分节符&#xff0c;操作步骤如下&#xff1a; 可以在页面上看到分节符&#xff0c;分节符的作用就是将多个页面分节&#xff0c;分节符前是一节&#xff0c;之后是另外一…

word操作——论文中——设置WPS奇偶页页眉内容不同和公式居中,公式的标号靠右、......

一、设置WPS奇偶页页眉内容不同&#xff1a; 一、先设置“奇偶页不同”&#xff1a; 首先双击页眉&#xff0c;在工具栏点击页眉页脚选项&#xff0c;勾选奇偶页不同、奇数页页眉同前节&#xff08;可选&#xff09;&#xff0c;后确定。 二、然后&#xff0c;在分各章节的页…