全部章节   >>>>


本章目录

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. 【leetcode】222. Count Complete Tree Nodes(完全二叉树)

    Given the root of a complete binary tree, return the number of the nodes in the tree. According to W ...

  2. 【swift】Xcode未响应(卡死、卡住、CPU满载、忙碌、转圈圈)

    在尝试了网上的方法,依然没能解决问题,尝试如下: 1.去自己项目的路径,找到<你的项目名.xcodeproj>,点击[显示包内容],删除xcuserdata文件夹 2.去Library,把 ...

  3. Android EditText软键盘显示隐藏以及“监听”

    一.写此文章的起因 本人在做类似于微信.易信等这样的聊天软件时,遇到了一个问题.聊天界面最下面一般类似于如图1这样(这里只是显示了最下面部分,可以参考微信等),有输入文字的EditText和表情按钮等 ...

  4. 解决springboot序列化 json数据到前端中文乱码问题

    前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...

  5. Mysql 常见报错和疑问汇总

    1.初始化数据库的时候报错 error while loading shared libraries: libstdc++.so.5: cannot open shared object file:  ...

  6. Linux后台启动服务

    systemctl 启动/关闭/启用/禁用服务 总结 启动服务 systemctl start test.service 关闭服务 systemctl stop test.service 重启服务 s ...

  7. 【Java基础】Java中如何获取一个类中泛型的实际类型

    泛型的术语 <>: 念做typeof List<E>: E称为类型参数变量 ArrayList<Integer>: Integer称为实际类型参数 ArrayLis ...

  8. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析

    参考资料 Rocketmq官网:http://rocketmq.apache.org/ Rocketmq的其它项目:https://github.com/apache/rocketmq-externa ...

  9. 【简】题解 AWSL090429 【原子】

    预处理出每个原子最近的不能合并的位置 枚举当前位置和前面断开的位置合并 发现还是不能过 考虑用选段树优化 但是因为每次转移的最优点是在前面可以合并的范围内 dp值加上当前的到该点的最大值 因为每个位置 ...

  10. pthread_cond_signal与pthread_cond_wait详解

    转:http://blog.chinaunix.net/uid-11572501-id-3456343.html //pthread_cond_signal 只发信号,内部不会解锁,在Linux 线程 ...