一.会话
1.概念:一次会话中包含多次请求和响应
*一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2.功能:在一次会话的范围内,共享数据
3.方式:
a.客户端会话技术:Cookie(将数据存在客户端)
b.服务器端会话技术:Session(将数据存在服务器端)
4.作用
实际上会话问题解决的还是客户端与服务器之间的通信问题,通过一些会话技术,可以将每个用户的数据以例如cookie/session的形式存储,方便以后用户访问web资源的时候使用
不能用 HttpServletRequest的原因:
我们的一次会话中,存在多次请求和响应,而浏览器客户端的每一次请求都会产生一个 HttpServletRequest 对象,它只会保存此次请求的信息,例如放入购物车与购买付款是不同的请求,很显然数据没有得到很好的保存处理
不能用 ServletContext 的原因:ServletContext对象是被整个web应用所共享的,将数据都存到这里,无疑会无法区分具体信息的归属
二.Cookie
1.概念:客户端会话技术,将数据存在客户端
2.简单模型
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletCookie")
public class ServletCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建Cookie对象
Cookie c = new Cookie("msg","hello");
//2.发送Cookie
response.addCookie(c);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletCookie2")
public class ServletCookie2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3.获取Cookie
Cookie[] cs = request.getCookies();
if(cs != null){
for (Cookie c : cs){
String name = c.getName();
String value = c.getValue();
System.out.println(name + ":" +value);
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
3.图片分析
4.实现原理
基于响应头set-cookie和请求头cookie实现
5.可以创建多个cookie对象,并且可以发送
6.默认情况下,当浏览器关闭时,Cookie数据被销毁,但是,我们可以设置Cookie,使它持久化存储:setMaxAge(int seconds)
seconds:
1>将Cookie数据写到硬盘的文件中,持久化存储。seconds为cookie的存活时间。
2>负数:默认值
3>0:删除Cookie信息
cookie共享问题
1.如果在同一个tomcat服务器中,部署了多个web项目,那么这些web项目中cookie不能共享
解决共享问题:setPath(String path):设置cookie的获取时间,默认情况下,设置当前的虚拟路径,如果要共享,将path设置成“/”
2.不同tomcat服务器间cookie共享问题
setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
一级域名:http://tieba.baidu.com/ http://news.baidu.com/
.baidu.com就是一级域名
setDomain(”.baidu.com“):tieba.baidu.com和news.baidu.com中cookie就可以共享
cookie作用
1.cookie一般用于存储少量的不太敏感的数据
2.在不登录的情况下,完成服务器对客户端的身份识别