目录
2.第二次请求:浏览器会自动带Cookie对象一并发送到服务器
一、会话跟踪概述
预备知识
http协议无状态:它不记忆谁访问了它

会话的概念与作用
1.什么是会话
浏览器和服务器之间的一次连续的通讯过程叫做会话。


2.会话的作用
会话跟踪技术就能够实现这样的功能:
- 能够跟踪客户端与服务器端的交互,
- 保存和记忆相关的信息,
- 保存请求的状态信息。
- 解决HTTP协议的无状态的弊端
核心:为了记住你是谁
现行常用的会话跟踪技术
1.URL方式:需要保存的信息直接追加到URL后,例如:http://127.0.0.1:8080/chapter03/viewList?pageNo=12
2.隐藏域方式:可以使用表单中的隐藏域保存相关信息, 例如:
<input type="hidden" name=“status" value=“true">
3.Cookie方式:将状态信息保存到客户端,服务器能够获得相关信息进行分析,从而生成对客户端的响应;例如简化登录功能就可以使用Cookie实现;
4.Session方式:将状态信息保存到服务器的会话对象中,通过唯一标记的ID值与客户端进行绑定使用;例如访问控制功能就可以使用Session实现.
阶段总结
1.什么是会话?
浏览器和服务器的一次连续的通讯过程
2.会话的作用?
1.跟踪客户端和服务器的交互
2.保存记忆相关的信息
3.保存请求的状态信息
4,解决HTTP协议的无状态的弊端
3.常见的会话跟踪技术
1.url
2,隐藏域
3.cookie
4.session
二、Cookie
Cookie的功能与特点
1.什么是Cookie:Cookie是保存在客户端(浏览器)的小文本。
2.Cookie的功能:将用户活动过程中的状态信息保存在客户端。
3.Cookie的特点:
1.Cookie在客户端保存用户的信息
2.服务器可以得到用户的信息进行处理,跟踪用户的状态
Cookie的域及最大生命时间

1.name:cookie的名字,每个cookie都有一个名字;
2.content:cookie的值,与名字一起作为键值对形式存在;
3.domain:域,该cookie的域名,例如左图中是163.com,说明当前cookie来自163.com;
4.path:路径,访问163.com下该路径时,当前cookie将被发送;
5.Created:cookie被创建的时间;
6.Expired:cookie失效的时间;
7.最大生命时间:失效时间和创建时间的时间差,就是cookie的最大生命时间,超过该时间,cookie将失效,不再被发送到相应的域地址;
在Servlet中创建Cookie、设置Cookie属性

在响应中设置Cookie信息
如何将创建好的cookie对象保存到客户端? response.addCookie(cookie);
作用:
1.将Servlet创建好的Cookie对象放到response对象中。
2.在没有设置最大生命时间的情况下.浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存中,关闭浏览器缓存就没有了,cookie也没有了。
3.如果设置了最大生命时间(如:7*24*3600)的情况下,浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存和硬盘中,关闭浏览器缓存就没有了,cookie还存在,下次开启浏览器访问网站cookie还能使用。

1.第一次请求:服务器将cookie放到response对象中,让浏览器保存cookie对象
2.第二次请求:浏览器会自动带Cookie对象一并发送到服务器
package com.tjetc;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CookieAddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建Cookie对象
Cookie cookie = new Cookie("username", "jack");
//设置cookie的声明时间为7天
//cookie.setMaxAge(3600 * 24 * 7);//setMaxAge单位是秒
//response响应对象添加Cookie对象,直接响应到浏览器中(将cookie保存到客户端)
resp.addCookie(cookie);
}
}


获取请求中的Cookie信息
当访问相同域及路径时,没有超过有效时间的cookie将自动通过请求被发送到服务器端

package com.tjetc;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class CookieGetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取write对象
PrintWriter writer = resp.getWriter();
//获取cookie,使用request得到浏览器发送过来的cookie
Cookie[] cookies = req.getCookies();
if (cookies != null) {
//遍历cookies
for (Cookie cookie : cookies) {
//输出cookies的信息到页面上
writer.println(cookie.getName() + "=" + cookie.getValue());
}
}
}
}


课堂练习
1.目标
1.使用Cookie(name,value)创建cookie
2.将创建好的cookie对象保存到客户端
2.步骤
(1)新建web工程
(2)新建CookieServlet
(3)创建cookie
(4)将cookie保存到客户端
(5)在servlet得到cookie
(6)运行CookieServlet
(7)浏览器再次访问
Chrome浏览器
右上角的3个点---->设置---->隐私设置和安全性---->所有 Cookie 和网站数据---->localhost
Cookie的最大生命时间
1.在没有设置最大生命时间的情况下
浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存中,关闭浏览器缓存就没有了,cookie也没有了。关闭浏览器,关闭服务器重启
2.如果设置了最大生命时间(如:7*24*3600)的情况下
浏览器接收到Cookie对象后存储到浏览器的本地cookie缓存和硬盘中,关闭浏览器缓存就没有了,cookie还存在,下次开启浏览器访问网站时cookie还能使用.
//设置cookie的声明时间为7天
cookie.setMaxAge(3600 * 24 * 7);//setMaxAge单位是秒


关闭浏览器,重新打开浏览器,cookie依然存在.
这时我们发请求,cookie会自动发送
修改系统时间7天以后,关闭浏览器,重新启动,重新访问servlet,会重新生成Cookie对象
阶段总结
1.Cookie有什么作用?
保存在客户端的小文本,用来跟踪用户的状态信息
2.Servlet规范中的Cookie类有哪些方法?
1.new Cookie(name,value) 创建cookie对象
2.cookie.setMaxAge(多少秒) 设置cookie的最大生命时间
3.cookie.setValue(name) 设置cookie的值
4.cookie.setDomain(name) 设置域名
3.如何将Cookie保存到客户端?
response.addCookie(cookie);
4.如何获取Cookie?
Cookie[] cookies=request.getCookies();
总结
1.什么是会话?
浏览器和服务器的一次连续的通讯过程
2.会话的作用?
1.跟踪客户端和服务器的交互
2.保存记忆先关的信息
3.保存请求的专挑信息
4,解决HTTP协议的无状态的弊端
3.常见的会话跟踪技术
1.url
2,隐藏域
3.cookie
4.session
4.什么是Cookie?
保存在客户端的小文本
5.Cookie的功能?
将用户活动过程中的状态信息保存在客户端
6.Cookie的特点
1.Cookie在客户端保存用户的信息
2.服务器可以得到cookie保存的用户信息进行处理,跟踪用户的状态
7.Cookie的域
1.name:名字
2.content:值
3.domain:域
4.path:路径
5.Created:创建时间
6.Expired:失效时间
7.最大生命时间:失效时间-创建时间之差
8.Servlet创建Cookie使用的方法
Cookie cookie=new Cookie(name,value);
9.Servlet中设置Cookie的属性
1.setMaxAge(多少秒):设置最大生命时间
2.setValue(name):设置cookie的值
3.setDomain(name):设置域
10.响应添加Cookie,让浏览器保存Cookie
response.addCookie(cookie);
11.servlet如何得到cookie
Cookie[] cookies=request.getCookies();
12.浏览器如何查看cookie
1.Chrome
2.Firefox
13. 最大生命时间
1.不设置 保存在浏览器缓存中,浏览器关闭后缓存没有了cookie也没有
2.设置 保存在浏览器缓存和磁盘中,浏览器关闭后缓存没有了,但是cookie还有,下次启动浏览器能看到cookie.

