本章目录
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 实践练习
总结
HTTP协议是“无状态”的,服务器端接收客户端的请求,生成HTTP响应回发,服务器端关闭连接
当发生一次请求和响应结束后服务器并不能记录信息,在这种协议下,不能完成 购物车这样的功能。因为,第二次请求服务器时,服务器并不知道客户端什么时候请求过,或者,上次购买过什么书籍
会话的概念:
Web应用中的会话是指一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程。例如:生活中的打电话过程,在超市购物过程,都具有一系列连续过程
Web 应用的会话状态是指 Web 服务器与浏览器在会话过程中产生的状态信息。
必须跟踪同一个客户所发出的一系列请求,会话跟踪技术使服务器应用程序可以保持客户状态等相关信息
会话跟踪技术可以通过以下 4 种方式实现:
Web 服务器在一段时间会接收多个客户端浏览器的访问请求,Web 服务器为了区分哪些请求消息属于同一会话,需要浏览器对其发出的请求进行标识
属于同一个会话中的请求消息均附带同样的标识 ID,这个标识 ID 被称为会话 ID(SessionID)
上述的过程可以简单理解为去银行办理业务时的银行卡号,卡号类似sessionID
会话跟踪的流程如下:
Cookie 是Web 服务器在 HTTP 响应信息中附带传送给客户端浏览器的一段数据。一旦浏览器保存了这段数据,那么在以后每次访问该 Web 服务器时,都会在 HTTP 请求中将这段数据带给 Web 服务器
Cookie 是最先由 Web 服务器发出的,是否发送Cookie 和发送 Cookie 的具体内容,完全由服务器端程序来决定,但是Cookie数据是存储在客户端
不同版本浏览器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得到数组,循环数组
Cookie 的 maxAge 决定 Cookie 的有效期,单位为秒,通过 getMaxAge() 方法与 setMaxAge(int maxAge) 方法来读写 maxAge 属性
Cookie cookie=new Cookie(“username”,”cookies”);
cookie.setMaxAge(0); //表示删除该Cookie
response.addCookie(cookie); //如果同名会覆盖以前的Cookie
隐藏域是用于收集或发送信息表单的不可见元素,对于网页的访问者而言,隐藏域是不可见的
隐藏域必须配合表单使用,和文本框类似,只不过看不见。当提交表单时,隐藏域会将信息用事先设置时定义的名称和值发送给服务器
隐藏域不可见,所以隐藏的信息一般都是提前预定的参数和数据值,比如修改信息时隐藏的id
id用户看不见,但是可以提交至服务器作为修改的条件
网页记住密码功能是许多网站都具备的功能,即用户勾选记住密码选项提交信息后,第二次打开该界面,密码默认显示在密码文本框中
实现思路是通过取 / 存 / 删 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);