• (尚硅谷)JavaWeb新版教程11-Cookie-Kaptcha-Exp



    参考文献

    1. 深入理解Cookie
    2. 第二节 Cookie的工作机制
    3. cookie详解

    1、Cookie

    1.1 什么是 Cookie

    客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

    在这里插入图片描述

    1.2 Cookie 的使用

    1. 初次请求,创建 Cookie 对象,并且发送给浏览器(响应中携带)

    在这里插入图片描述

    1. 在客户端保存 Cookie(在 cookie 有效期内第二次及之后的请求中,浏览器将请求连同 cookie 一同发送回来)

    在这里插入图片描述

    注意:

    • 浏览器提交 Cookie 时只会提交 name 和 value 属性,其他的属性是不传送的,只是浏览器用来自己判断信息用。

    1.3 cookie 的设置

    在这里插入图片描述

    1. cookie.setMaxAge();:设置 cookie 的有效时长;服务器端明确设置了Cookie 的存在时间之后,在浏览器端,Cookie 数据会被保存到硬盘上,否则的话,一个会话内有效,且只存在于内存中;
    2. cookie.setDomain(pattern);:设置域,如果没有显式设置,则浏览器会自动取 url 的 host 作为 domain 值;
    3. cookie.setPath(uri);:设置路径,设置为"/"表示允许所有路径都可以使用Cookie;

    域+路径 = url 资源地址 ,默认情况下 cookie 是整个网站通用的;

    在这里插入图片描述

    1.4 Cookie 的应用

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

    2、Kaptcha - 验证码

    2.1 为什么需要验证码?

    1. 没有验证码,别人会恶意攻击
    2. 现有的验证码组合:数字+英文字母+算数+请依次点击什么汉字+拖动滚动条使图片重合

    2.2 kaptcha 如何使用

    1. 添加 jar 包,记得在该模块中添加依赖并重新部署:

    在这里插入图片描述

    1. 在 web.xml 文件中注册 KaptchaServlet,并设置验证码图片的相关属性;
    <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>red</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <!--表示在这个字符范围内选择字符-->
            <param-value>abcdefg</param-value>
        </init-param>
        <init-param>
            <!--验证码要不要加噪-->
            <param-name>kaptcha.noise.impl</param-name>
            <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>KaptchaServlet</servlet-name>
        <url-pattern>/kaptch.jpg</url-pattern>
    </servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    1. 在 html 页面上编写一个 img 标签,然后设置 src 等于 KaptchaServlet 对应的 url-pattern

    在这里插入图片描述

    在这里插入图片描述

    2.3 kaptcha 验证码常用配置

    1. kaptcha 验证码图片的各个属性在常量接口:Constants 中;
    2. 如果想要配置验证的属性,在一对 <init-param> 标签中进行配置,其中下面定义的字符串即为 web.xml 文件中的 <param-name> 中,具体每个字符串是什么意思,可以参考:验证码 KAPTCHA 参数详解

    在这里插入图片描述

    1. KaptchaServlet 在生成验证码图片时,会同时将验证码信息保存到 session 中;
    @WebServlet("/kaptcha01")
    public class KaptchaServletDemo01 extends HttpServlet {
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            HttpSession session = request.getSession() ;
            Object obj = session.getAttribute("KAPTCHA_SESSION_KEY");
            System.out.println("obj = " + obj);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    网页访问:

    在这里插入图片描述

    控制台打印:

    在这里插入图片描述

    注意:

    • <img src="kaptch.jpg"/> 这个其实不是一个图片,而是一个 url 资源,那个 servlet 帮我们产生了一个验证码,并且帮我们把验证码保存到了 session 中。
    • 我们先访问 hello02.html,然后访问 kaptcha01 就会在控制台打印出相同的验证码,这个打印在控制台的是我们从 session 中获取的。

    2.4 书城项目的注册验证码实现(具体看书城项目第三部分)

    1. 因此,我们在注册请求时,首先将用户文本框中输入的验证码值和 session 中保存的值进行比较,相等,则进行注册;

    3、Exp - 正则表达式

    正则表达式有三个主要用途:

    1. 模式验证: 检测某个字符串是否符合规则,例如检测手机号、身份证号等等是否符合规范
    2. 匹配读取: 将目标字符串中满足规则的部分读取出来,例如将整段文本中的邮箱地址读取出来
    3. 匹配替换: 将目标字符串中满足标准的部分替换为其他字符串,例如将整段文本中的"hello"替换成"haha"

    3.1 正则表达式的使用三步骤

    1. 定义正则表达式对象

      正则表达式定义有两个方式:

      1. 对象形式
        var reg = new RegExp(“abc”)
      2. 直接量形式,用//来定义
        var reg = /abc/;
      3. 匹配模式:
        - g 全局匹配
        - i 忽略大小写匹配
        - m 多行匹配
        - gim 这三个可以组合使用,不区分先后顺序
        例如: var reg = /abc/gim , var reg = new RegExp("abc","gim");
    2. 定义待校验的字符串

    3. 校验

    3.2 使用案例

    1. 基本使用:
    在这里插入图片描述

    在这里插入图片描述

    • reg.test 函数是只要有一个就返回 true;

    • 正则表达式定义在 script 标签中。

    2. 全文匹配:

    在这里插入图片描述

    在这里插入图片描述

    • 不加 g 作为后缀条件的话,只有第一个 o 会被替换;

    3. 忽略大小写匹配:

    在这里插入图片描述
    在这里插入图片描述

    • 不加 i 作为后缀的话,后面一个大小的 O 不会被匹配到;

    4. 多行匹配:
    在这里插入图片描述
    在这里插入图片描述

    • 不加 m 作为结尾的话,这里返回 false 表示没有匹配成功,因为默认去找 hello\nworld 整个字符串的结尾去;

    3.3 元字符

    在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上\,例如:\^

    在这里插入图片描述

    1. \w 数字字母下划线

    在这里插入图片描述
    在这里插入图片描述

    • 除特殊字符外,其它的每个数字、字母、下划线被替换成 A;
    • 并且中间定义了 \n 换行符,所以控制台输出换行了;
    1. \s 匹配任意空白符
      在这里插入图片描述
      在这里插入图片描述
    • 本来有个换行,这里替换成 A ,一行输出了;
    1. \d \D 匹配数字非数字
      在这里插入图片描述
      在这里插入图片描述

    2. \b 匹配单词的开始和结束(检测到空格代表一个单词)

    在这里插入图片描述
    在这里插入图片描述

    1. ^ 表示匹配开始 $表示匹配结尾

    在这里插入图片描述
    在这里插入图片描述

    3.4 集合

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 将 a-g 中的任意字符替换为 A;

    3.5 出现的次数

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    • 匹配 2-4 个 字符 l ,由于 5 个 l 字符,匹配了前四个,还剩最后一个没办法匹配,所以没有被替换;

    3.6 或者 | 的使用

    在这里插入图片描述

    在这里插入图片描述

    3.6 常用正则表达式(用的时候直接查百度就可以)

    在这里插入图片描述

  • 相关阅读:
    美国国家安全实验室员工详细数据在网上泄露
    jquery+ajax验证不通过也提交表单问题处理
    【运维自动化-配置平台】如何使用云资源同步功能(腾讯云为例)
    vue 创建工程
    【Leetcode】旋转系列(数组、矩阵、链表、函数、字符串)
    【面试】虚拟机栈面试题
    写在大二结束
    Rabbitmq 常见问题处理
    linux 常用命令
    MySQL之索引
  • 原文地址:https://blog.csdn.net/qq_42148002/article/details/125476352