⽤户会话
服务器⽆法识别每⼀次 HTTP请求的出处(不知道来⾃于哪个终端),它只会接受到⼀个请求信号,所以就存在⼀个问题:将⽤户的响应发送给其他⼈,必须有⼀种技术来让服务器知道请求来⾃哪,这就是会话技术。
会话:打开浏览器进⾏操作到关闭浏览器的过程。
实现会话有两种⽅式:
- Session
- Cookie
Session
属于同⼀次会话的请求都有⼀个相同的标识符,sessionID
session 常⽤的⽅法:
String getId() 获取 sessionID
void setMaxInactiveInterval(int interval) 设置 session 的失效时间,单位为秒
int getMaxInactiveInterval() 获取当前 session 的失效时间
void invalidate() 设置 session ⽴即失效
void setAttribute(String key,Object value) 通过键值对的形式来存储数据
Object getAttribute(String key) 通过键获取对应的数据
void removeAttribute(String key) 通过键删除对应的数据
Cookie
Cookie 是服务端在 HTTP 响应中附带传给浏览器的⼀个⼩⽂本⽂件,⼀旦浏览器保存了某个 Cookie,
在之后的请求和响应过程中,会将此 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端
和服务端的数据交互。
*创建Cookie
Cookie cookie = new Cookie("name","tom");
response.addCookie(cookie);
- 读取Cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie:cookies){
out.write(cookie.getName()+":"+cookie.getValue()+"<br/>");
}
Cookie 常⽤的⽅法
void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒
int getMaxAge() 获取 Cookie 的有效时间
String getName() 获取 Cookie 的 name
String getValue() 获取 Cookie 的 value
Session 和 Cookie 的区别
session:
保存在服务器
保存的数据是 Object
会随着会话的结束⽽销毁
保存重要信息
session:setAttribute(“name”,“admin”) 存
getAttribute(“name”) 取
⽣命周期:
服务端:只要 WEB 应⽤重启就销毁
客户端:只要浏览器关闭就销毁。
退出登录:session.invalidate()
cookie:
保存在浏览器
保存的数据是 String
可以⻓期保存在浏览器中,⽆会话⽆关
保存不重要信息
存:
response.addCookie(new Cookie(name,“admin”))
取:
Cookie[] cookies = request.getCookies();
for (Cookie cookie:cookies){
if(cookie.getName().equals("name")){
out.write("欢迎回来"+cookie.getValue());
}
}
⽣命周期:
不随服务端的重启⽽销毁
客户端:默认是只要关闭浏览器就销毁,我们通过 setMaxAge()⽅法设置有效期
⼀旦设置了有效期,则不随浏览器的关闭⽽销毁,⽽是由设置的时间来决定。
退出登录:setMaxAge(0)