全部章节   >>>>


本章目录

7.1 会话跟踪技术概述

7.1.1 为什么需要会话跟踪

7.1.2 会话的状态和跟踪

7.1.3 会话跟踪技术

7.1.4 会话跟踪工作流程

7.1.5 实践练习

7.2 Cookie技术

7.2.1 Cookie概述

7.2.2 操作Cookie

7.2.3 Cookie有效期

7.2.4 实践练习

7.3 表单隐藏域

7.3.1 表单隐藏域概述

7.3.1 表单隐藏域的使用

7.3.2 实践练习

7.4 综合应用——网页记住密码功能

7.4.1 网页记住密码功能概述

7.4.2 实践练习

总结


7.1 会话跟踪技术概述

7.1.1 为什么需要会话跟踪

HTTP协议是“无状态”的,服务器端接收客户端的请求,生成HTTP响应回发,服务器端关闭连接

当发生一次请求和响应结束后服务器并不能记录信息,在这种协议下,不能完成   购物车这样的功能。因为,第二次请求服务器时,服务器并不知道客户端什么时候请求过,或者,上次购买过什么书籍

7.1.2 会话的状态和跟踪

会话的概念:

Web应用中的会话是指一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程。例如:生活中的打电话过程,在超市购物过程,都具有一系列连续过程

Web 应用的会话状态是指 Web 服务器与浏览器在会话过程中产生的状态信息。

  • 在购物过程中,Web 服务器要记住客户的账号及其订购的产品,以便正确结算
  • Web 服务器能够将同一会话中的一系列请求和响应过程关联起来,使它们之间可以相互依赖和传递信息

必须跟踪同一个客户所发出的一系列请求,会话跟踪技术使服务器应用程序可以保持客户状态等相关信息

7.1.3 会话跟踪技术

会话跟踪技术可以通过以下 4 种方式实现:

  • Session 技术
  • Cookie 技术
  • 表单隐藏域技术
  • URL 重写技术

7.1.4 会话跟踪工作流程

Web 服务器在一段时间会接收多个客户端浏览器的访问请求,Web 服务器为了区分哪些请求消息属于同一会话,需要浏览器对其发出的请求进行标识

属于同一个会话中的请求消息均附带同样的标识 ID,这个标识 ID 被称为会话 ID(SessionID)

上述的过程可以简单理解为去银行办理业务时的银行卡号,卡号类似sessionID

会话跟踪的流程如下:

  • 客户端第一次访问 Web 服务器时,服务器为该客户端创建一个会话,并产生唯一的 SessionID
  • 服务器响应客户端,将 SessionID 回传给客户端
  • 客户端再次向 Web 服务器发出请求时,附带 SessionID,服务器根据 SessionID 来唯一标识客户端,不同客户端的SessionID是不同的

7.1.5 实践练习

7.2 Cookie技术

7.2.1 Cookie概述

Cookie 是Web 服务器在 HTTP 响应信息中附带传送给客户端浏览器的一段数据。一旦浏览器保存了这段数据,那么在以后每次访问该 Web 服务器时,都会在 HTTP 请求中将这段数据带给 Web 服务器

Cookie 是最先由 Web 服务器发出的,是否发送Cookie 和发送 Cookie 的具体内容,完全由服务器端程序来决定,但是Cookie数据是存储在客户端

不同版本浏览器Cookie数据的存储位置也大不相同

7.2.2 操作Cookie

Servlet API 中提供了一个 javax.servlet.http.Cookie 类来封装 Cookie 信息,常用操作方法如下

方法名

作用

Cookie(String name,String value)

用于构造一个Cookie信息,键值对形式存储

public String  getName()

用于获取 Cookie 的名称

public void  setValue(String value)

用于设置 Cookie 的值为 Value

public String getValue()

用于获取 Cookie 的值

public void setMaxAge()

设置 Cookie 在客户端浏览器上保存的有限时间(秒)

public int getMaxAge()

获取 Cookie 在客户端浏览器上保存的有限时间(秒)

Cookie的存储:

服务端构建Cookie实例对象后,需要通过HttpServletResponse 接口中提供的 addCookie() 方法,将该Cookie发送给客户端浏览器接收

Cookie的获取:

Cookie是客户浏览器发送给服务器的,所以需要从HttpServletRequest中调用getCookies(),得到所有Cookie,即数组,遍历该 Cookie 数组,即可获取想要的 Cookie 信息

不同版本浏览器均可以设置是否启用Cookie,存储Cookie的位置也不同

示例:使用Cookie存储信息和读取Cookie中的信息

// 获取 Cookie 数组
Cookie[] cookies = request.getCookies();
if (cookies == null) {
pw.println(" 第一次访问 CookieServlet,此时还没有 Cookie 实例 ");
} else {
for (int i = 0; i < cookies.length; i++) {
pw.println("Cookie 名称 :" + cookies[i].getName() + ",
Cookie 值 :" +cookies[i].getValue());}
}

通过request对象获取所有Cookie得到数组,循环数组

7.2.3 Cookie有效期

Cookie 的 maxAge 决定 Cookie 的有效期,单位为秒,通过 getMaxAge() 方法与 setMaxAge(int maxAge) 方法来读写 maxAge 属性

  • 正数,则表示该 Cookie 会在 maxAge 秒后自动失效,浏览器会进行存储,保证有效期
  • 负数,则表示该 Cookie 仅在本浏览器窗口或打开的子窗口内有效,不会写到客户端存储
  • 0,则表示删除该 Cookie
Cookie cookie=new Cookie(“username”,”cookies”);
cookie.setMaxAge(0); //表示删除该Cookie
response.addCookie(cookie); //如果同名会覆盖以前的Cookie

7.2.4 实践练习

7.3 表单隐藏域

7.3.1 表单隐藏域概述

隐藏域是用于收集或发送信息表单的不可见元素,对于网页的访问者而言,隐藏域是不可见的

隐藏域必须配合表单使用,和文本框类似,只不过看不见。当提交表单时,隐藏域会将信息用事先设置时定义的名称和值发送给服务器

<form action=“url 路径” method=“请求方法”>
  <input type=“hidden” name=“隐藏域别名” value=“隐藏域的值”>
</from>

7.3.1 表单隐藏域的使用

隐藏域不可见,所以隐藏的信息一般都是提前预定的参数和数据值,比如修改信息时隐藏的id

<form action=“url 路径” method=“post”>
  <input type=“hidden” name=“userId” value=“4”>
<p> 用户名:<input type=“text” name=“userName” value=“” /></p>
<p> 密码:<input type=“text” name=“userPwd” value=“” /></p>
<p> 地址:<input type=“text” name=“userAddr” value=“” /></p>
<p><input type=“submit” value=“修改” /></p>
</from>

id用户看不见,但是可以提交至服务器作为修改的条件

7.3.2 实践练习

7.4 综合应用——网页记住密码功能

7.4.1 网页记住密码功能概述

网页记住密码功能是许多网站都具备的功能,即用户勾选记住密码选项提交信息后,第二次打开该界面,密码默认显示在密码文本框中

实现思路是通过取 / 存 / 删 Cookie 实现的

  • 进入登录页,先去读取 Cookie
  • 如果浏览器的 Cookie 中有账号信息,说明存储过,就取出填充到登录框中
  • 用户登录成功之后,判断当前用户是否勾选了记住密码,如果勾选了,则把账号信息存到 Cookie 当中

示例:使用Cookie实现网页记住密码功能

登录处理请求的Servlet核心代码思路:
//判断记住密码复选框是否勾选,如果勾选则执行下面代码
// 创建 Cookie 实例
Cookie cookie = new Cookie(“userPwd”, null);
cookie.setMaxAge(0);
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
// 向响应中添加 cookie
response.addCookie(cookie);

7.4.2 实践练习

总结

  • Http协议是一种无状态的协议,它不记录任何客户端相关信息
  • 会话跟踪技术使服务器应用程序可以保持客户状态等相关信息,从而能够区分跟踪不同用户
  • 常用的会话跟踪技术包括:Session技术、Cookie技术、表单隐藏域技术、URL重写技术
  • Cookie是服务器将数据发送给客户端,客户端将数据存放在本地的一种技术
  • 隐藏域是用于收集或发送信息表单的不可见元素,当提交表单时,隐藏域会将信息用事先设置时定义的名称和值发送给服务器

Java Web程序设计笔记 • 【第7章 会话跟踪技术】的更多相关文章

  1. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

  2. Java Web程序设计笔记 • 【第8章 会话跟踪技术进阶】

    全部章节   >>>> 本章目录 8.1 Session机制 8.1.1 Session 简介 8.1.2 创建 HttpSession 实例 8.1.3 HttpSesiso ...

  3. Java Web程序设计笔记 • 【第5章 Servlet技术】

    全部章节   >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...

  4. Java Web程序设计笔记 • 【第6章 Servlet技术进阶】

    全部章节   >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...

  5. Java Web程序设计笔记 • 【第1章 Web应用程序】

    全部章节   >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...

  6. Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

    全部章节   >>>> 本章目录 4.1 JavaBean 4.1.1 JavaBean 概述 4.1.2 JavaBean的重要性 4.1.3 JavaBean的特点 4.1 ...

  7. Java Web程序设计笔记 • 【第3章 JSP内置对象】

    全部章节   >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...

  8. Java Web程序设计笔记 • 【第9章 EL表达式】

    全部章节   >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...

  9. Java Web程序设计笔记 • 【第2章 JSP基础】

    全部章节   >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...

随机推荐

  1. C++之数组转换

    题目如下: 这道题经过好久的思考也没找到能一次性输入两组数的方法,只能一次性处理一组数,所以就把代码放上来,欢迎交流留言一起讨论可以放两组数的方法~(QQ 841587906) 1 #include ...

  2. Shell学习(三)——Shell条件控制和循环语句

    参考博客: [1]Shell脚本的条件控制和循环语句 一.条件控制语句 1.if语句 1.1语法格式: if [ expression ] then Statement(s) to be execut ...

  3. canal整合springboot实现mysql数据实时同步到redis

    业务场景: 项目里需要频繁的查询mysql导致mysql的压力太大,此时考虑从内存型数据库redis里查询,但是管理平台里会较为频繁的修改增加mysql里的数据 问题来了: 如何才能保证mysql的数 ...

  4. Dubbo服务限流

    为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流. Dubbo中能够实现服务限流的方式较多,可以划分为两 ...

  5. 【Linux】【Shell】【Basic】条件测试和变量

    bash脚本编程       脚本文件格式:         第一行,顶格:#!/bin/bash         注释信息:#         代码注释:         缩进,适度添加空白行:   ...

  6. 11、Redis的配置文件

    Redis的配置文件 一.Redis配置文件简介 Redis是通过配置文件启动的 Redis对大小写字母不敏感 Redis基本上环境搭建都在配置文件 关于Redis配置文件位置是安装时放的位置,关于R ...

  7. C#和.NET 框架

    C#和.NET框架 在.NET之前 20世纪90年代,微软平台多数程序员使用VB.C或C++.他们使用的技术都有问题. 技术 问题 纯Win32 API 不是面向对象,工作量比MFC大 MFC(Mic ...

  8. Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现

    要说现在工程师最重要的能力,我觉得工程能力要排第一. 就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱. 算法与工程实现 在 Sentinel- ...

  9. CF1111A Superhero Transformation 题解

    Content 有两个字符串 \(s,t\).规定元音字母只能够变换成元音字母,辅音字母只能够变换成辅音字母.试问 \(s\) 能否经过若干次变换得到 \(t\). 数据范围:\(1\leqslant ...

  10. 查看服务backlog大小 Send-Q

    ss -ntl 如下图 LISTEN 状态:          Recv-Q 表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,也就是说,当客户端通过 con ...