全部章节   >>>>


本章目录

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. windows Visual Studio 上安装 CUDA【转载】

    原文 : http://blog.csdn.net/augusdi/article/details/12527497  前提安装: Visual Studio 2012 Visual Assist X ...

  2. Ubuntu下STL源码文件路径+VS2010下查看STL源码

    Ubuntu版本信息 然后STL源码位置就在 /usr/include/c++/7/bits /usr/include/c++/7.4.9/bits 这两个文件下都有 然后我日常写程序用的Window ...

  3. Linux下查看JDK安装路径

    在安装好Git.JDK和jenkins之后,就需要在jenkins中进行对应的设置,比如在全局工具配置模块,需要写入JDK的安装路径. 这篇博客,介绍几种常见的在Linux中查看JDK路径的方法... ...

  4. 用户信息系统_serviceImpl

    package com.hopetesting.service.impl;import com.hopetesting.dao.UserDao;import com.hopetesting.dao.i ...

  5. logrotate没有rotate的排查过程

    前言 背景 xxx,你过来把squid的日志检查一下,是否做了日志切割:于是乎开启了logrotate没有切割日志的排查旅程,em--.只能说过程很爽,平时疲于应付繁琐的事情,难得有点时间能一条线慢慢 ...

  6. TSN 时间敏感网络:缘起 (TSN历史与现状)

    前言 随着工业物联网(IIoT)的兴起和工业4.0的提出,越来越多的设计师.工程师和最终用户关注时间敏感网络(Time-Sensitive Networking,下简称为TSN).TSN为以太网提供确 ...

  7. 转:苹果iphone APP界面设计尺寸官方版

    苹果iphone APP界面设计尺寸官方版

  8. GDB调试增强篇

    GDB中应该知道的几个调试方法 七.八年前写过一篇<用GDB调试程序>, 于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题.这 ...

  9. 粒子群算法-PSO

    粒子群优化算法 1. 背景知识 1995年美国社会心理学家Kennedy和电气工程师Eberhart共同提出粒子群优化算法(Particle Swarm Optimization, PSO).PSO算 ...

  10. [BUUCTF]PWN——mrctf2020_shellcode

    mrctf2020_shellcode 附件 步骤: 例行检查,64位程序,开启了relro和pie,没有nx,肯定是用shellcode最方便了 本地试运行一下,看看大概的情况 64位ida载入,根 ...