JavaWeb
1 Session和Cookie
Session和Cookie是两种用于维持客户端与服务器之间状态的机制。
1.1 Cookie的原理
-
浏览器发http请求
-
服务端响应HTTP,响应的HTTP协议的响应头中,服务端设置有Set-Cookie
- 服务端域名:www.a.com
- 代码
Cookie userCookie = new Cookie("username", "zhangsan");
userCookie.setMaxAge(1800); // 设置过期时间为1小时
userCookie.setPath("/"); // 设置路径
response.addCookie(userCookie); // 发送给浏览器
- 响应头
Set-Cookie: username=zhangsan;Max-Age=1800;Path=/;
- domain默认是 www.a.com 。如果是从chat.a.com发出请求,浏览器不会捎带该cookie
- 浏览器保存响应头
- 浏览器再次请求服务器,捎带cookie
- http请求报文:
Cookie:username=zhangsan
- 服务端获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("username")){
String s=cookie.getValue();
break;
}
}
1.2 Session原理
Session基于Cookie
-
浏览器发http请求
-
服务端代码里调用,有创建Session对象的效果的方法,Web容器(一般是TomCat)会创建Cookie和Session对象
- 代码
request.getSession();
//或者下面的代码
request.getSession(true);
TomCat会执行下面的过程
伪码分析:
1.第一次访问创建Session对象,给Session对象分配一个唯一的ID,叫JSESSIONID。
new HttpSession();
2.把JSESSIONID作为Cookie的值发送给浏览器保存
Cookie cookie = new Cookie("JSESSIONID", "abc123def456");
userCookie.setMaxAge(1800); // 设置过期时间为1小时
userCookie.setPath("/"); // 设置路径
response.addCookie(cookie);
- 响应头
Set-Cookie: JSESSIONID=abc123def456; Max-Age=1800; Path=/;
- domain默认是 www.a.com 。如果是从chat.a.com发出请求,浏览器不会捎带该cookie
- 浏览器保存响应头
- 浏览器再次请求服务器,捎带cookie
- http请求报文:
Cookie:JSESSIONID=abc123def456
- 服务端获取Session
HttpSession session = request.getSession();
//设置session信息,以便进行相关的业务
session.setAttribute("name","eric");
1.3 过期时间
1.3.1 Max-Age
Cookie 的有效期(秒)。指的是浏览器保存这串cookie的时长,超过了,浏览器销毁之。
- 举例说明:Max-Age为1800秒,过了1800秒,浏览器就销毁。
1.3.2 MaxInactiveInterval
动态设置当前 HTTP 会话(HttpSession)的非活动超时时间,单位为秒
- 举例说明
session.setMaxInactiveInterval(60); // 60秒
| 时间 | 用户在做什么 | 计时器状态 | Session 状态 |
|---|---|---|---|
| 09:00:00 | 登录成功 | 开始计时 60 秒 | 有效 |
| 09:00:30 | 点击"个人中心" | 重置为 0,重新计 60 秒 | 有效 |
| 09:01:10 | 点击"订单列表" | 重置为 0,重新计 60 秒 | 有效 |
| 09:01:50 | 点击"商品详情" | 重置为 0,重新计 60 秒 | 有效 |
| 09:05:00 | 点击"购物车" | 超过 60 秒 | 已经销毁了 |
- 用户每点一次页面,倒计时就会清零重新开始。
- 只有用户完全不操作、不请求服务器,连续超过 60 秒,Session 才会被销毁。
1.4 Domain和Path
Domain,哪个域名可以访问
Path,该域名下哪些路径可以访问
1.4.1 举例说明
2.Domain设置为*.a.com
| 场景 | 行为 |
|---|---|
| 同域名访问 | Cookie 正常发送 |
子域名访问(如 api.a.com) |
Cookie 正常发送 |
1.默认Domain是当前Host,比如www.a.com
浙公网安备 33010602011771号