1.什么叫会话
一次会话指的是:就好比打电话,A给B打电话,接通之后,会话开始,直到挂断电话,该次会话就结束了,而浏览器访问服务器,就跟打电话一样,浏览器A给服务器发送请求,访问web程序,该次会话就已经接通,其中不管浏览器发送多少请求(就相当于接通电话后说话一样),都视为一次会话,直到浏览器关闭,本次会话结束。
其中注意,一个浏览器就相当于一部电话,如果使用火狐浏览器,访问服务器,就是一次会话了,然后打开google浏览器,访问服务器,这是另一个会话,虽然是在同一台电脑,同一个用户在访问,但是,这是两次不同的会话。
2.引入cookie和session
思考一个问题,一个浏览器访问一个服务器就能建立一个会话,如果别的电脑,都同时访问该服务器,就会创建很多会话,就拿一些购物网站来说,我们访问一个购物网站的服务器,会话就被创建了,然后就点击浏览商品,对感兴趣的商品就先加入购物车,等待一起付账,这看起来是很普通的操作,但是想一下,如果有很多别的电脑上的浏览器同时也在访问该购物网站的服务器,跟我们做类似的操作呢?服务器又是怎么记住用户,怎么知道用户A购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,不能放入用户B或用户C的购物车内的呢?
这里我们就用cookie和session两种会话跟踪技术来跟踪整个会话。
3.cookie简介
3.1.cookie的工作原理
1)首先浏览器向服务器发出请求。
2)服务器就会根据需要生成一个Cookie对象,并且把数据保存在该对象内。
3)然后把该Cookie对象放在响应头,一并发送回浏览器。
4)浏览器接收服务器响应后,提出该Cookie保存在浏览器端。
5)当下一次浏览器再次访问那个服务器,就会把这个Cookie放在请求头内一并发给服务器。
- 服务器从请求头提取出该Cookie,判别里面的数据,然后作出相应的动作。
3.2.cookie中的常用方法
Cookie cookie=new Cookie(String name,String value) 构造一个cookie对象
response.addCookie(Cookie cookie) 是将一个cookie对象传入客户端。
request.getCookies() 得到所有的cookie对象
cookie.getName() 得到此cookie对象的名字
cookie.getValue() 得到对应名称的cookie的值
cookie.setMaxAge() 设置过期时间
3.3.案例
@WebServlet("/CookieServletDemo1")
public class CookieServletDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CookieServletDemo1() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 创建cookie对象
// cookie中`存放的数据以键值对存在map<String,String> 键和值都只能是字符串,不支持中文
Cookie cookie = new Cookie("username", "zhangsan");
Cookie cookie1 = new Cookie("password", "1234");
// 失效时间 以秒为单位
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
response.addCookie(cookie1);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws<