Cookie
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式
)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
- Cookie是浏览器保存在本地的文本内容
- Cookie常用于保存登录状态、用户资料等小文本
- Cookie具有时效性,Cookie内容会伴随请求发送给Tomcat
cookie的创建
// 创建一个cookie
Cookie cookie = new Cookie("user", "admin");
// 设置cookie
response.addCookie(cookie);
浏览器可以查看到:
读取cookie
// 用于获取所有的Cookie信息,返回一个数组
Cookie[] cs = request.getCookies();
for(Cookie c : cs) {
System.out.println(c.getName() + ":" + c.getValue());
}
response.getWriter().println("Cookie 读取成功");
如果不给cookie设置时间,cookie的默认时间则为当前浏览器窗口,浏览器关闭后,则销毁
cookie设置时间
cookie.setMaxAge(3600);// 单位为秒
Session
- Seesion(用户会话)用于保存于“浏览器窗口”对应的数据
- Seesion的数据存储在Tomcat服务器的内存中,具有时效性
- Seesion通过浏览器Cookie的
SessionId
值提取用户数据
创建Session
// 获取到用户会话Session对象
HttpSession session = request.getSession();
session.setAttribute("name", "张三");
提取Session
HttpSession session = request.getSession();
// 提取Session
String name = (String)session.getAttribute("name");
获取SessionId
String sessionId = session.getId();
sessionId 绑定浏览器窗口,浏览器窗口不同,所创建的sessionId 也不相同
从浏览器可以发现:
在浏览器中,创建了一个Cookie,存放值就是我们的SessionId
Session的原理
浏览器对服务器发送请求,服务器则为该Session创建了一个SessionId
,并返回此SessionId
给浏览器,浏览器通过Cookie保存服务器响应的SessionId
,当浏览器再一次请求的时候,则会拿着Cookie中的SessionId
去获取服务器里对应的Session
因此每一个Session对应的就是一个浏览器窗口,每一个浏览器窗口所存储的Session是不一样的