会话机制
Session
属于同一次会话的请求都有一个相同的标识符,sessionID
-
销毁时间
- 服务端: Web 应用重启就销毁
- 客户端:游览器关闭就销毁
-
常用方法
方法 描述 String getId() 获取当前的会话 ID int getMaxInActiveInterval() 获取会话的最大持续时间,单位是秒 void setMaxInactiveInterval(int interval) 设置会话的最大持续时间,单位是秒,负数表明会话永不失效 void invalidate() 立即使当前会话失效 void setAttribute(String key,String value) 通过键值对的形式存储数据 Object getAttribute(String key) 通过键获取对应的数据 void removeAttribute(String key) 通过键删除对应的数据
Cookie
Cookie 是服务器在 HTTP 响应中附带传给游览器的一个小文本文件,一旦游览器保存了某个 Cookie,在之后的请求和响应过程中,会将此 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端和服务端之间的数据交互
-
销毁时间
- 和服务器无关
- 在客户端中默认关闭游览器就销毁,可以通过 setMaxAge(int age) 方法设置有效期
- 有效期为 0 表示即时失效,用于删除操作
- 有效期为负数表示关闭游览器之前有效,和默认情况相同
- 有效期为正数表示会倒计时,与游览器关闭与否无关
-
创建
Cookie cookie = new Cookie("name","value");
response.addCookie(cookie);
- 读取
Cookie[] cookies = request.getCookies();
for (Cookie cookie:cookies){
out.write(cookie.getName()+" : "+cookie.getValue()+"<br/>");
}
-
修改与删除
通过创建同名的 Cookie 对象来覆盖原来的 Cookie 达到修改效果,再设置有效期为 0 达到删除的效果
-
常用方法
方法 void setMaxAge(int expiry) 设置 Cookie 的有效时间,单位为秒 int getMaxAge() 获取 Cookie 的有效时间,单位为秒 String getName() 获取 Cookie 的name String getValue() 获取 Cookie 的value
区别
Session | Cookie |
---|---|
保存在服务器 | 保存在客户端 |
保存的数据是 Object 型 | 保存的数据是 String 型 |
随着会话的结束而销毁 | 长期保存在游览器中(前提是设置了有效期) |
保存重要的信息 | 保存不重要的信息 |