1.会话概念
客户端与服务器的会话:
一次会话包含n次请求
客户端与服务器的会话开始: 客户端打开浏览器访问服务器
会话结束: 客户端关闭浏览器
2.会话跟踪技术
在一个会话的多个请求中共享数据,这就是会话跟踪技术
同一个客户端, 同一次会话的跨请求的数据共享
数据存储载体:
-
基于Cookie方式(存在客户端浏览器上)
-
基于HttpSession方式(依赖Cookie)
3.Cookie
Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点, cookie 一个key/value对
Cookie特征:
产生与服务器
保存与客户端浏览器上
其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
3.1 cookie的创建
通过Response方法
@WebServlet(name = "AServlet",value = "AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象
Cookie cookie = new Cookie("name","value");
//把Cookie保存到客户端浏览器上
response.addCookie(cookie);
}
}
3.2 获取cookie
在同一次会话中, 在其他请求获取Cookie(服务器)
通过Request对象的Cookie[] getCookies()获取带回到服务器的所有Cookie
@WebServlet(name = "AServlet", value = "AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过Request对象的getCookies()方法
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
//通过Cookie的名字来筛选
if (cookie.getName().equals("name")) {
System.out.println("name:" + cookie.getName() + ",value:" + cookie.getValue());
}
}
}
}
}
3.3 cookie的规范
-
Cookie大小上限为4KB;
-
一个服务器最多在客户端浏览器上保存20个Cookie;
-
一个浏览器最多保存300个Cookie;
浏览器厂家对cookie有一定扩展,
注意,不同浏览器之间是不共享Cookie的。也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。
注意: cookie尽量不要存储中文, 如果存储中文, 需要把中文转码 URLEncoding
3.4 cookie的修改与覆盖
浏览器缓存, 清除缓存, ctrl + F5 底层刷新
如果cookie的key存在, 覆盖value
3.5 cookie的最大存活时间
Cookie在客户端浏览器最大存活时间, 只要时间一到, (max-age=0),浏览器自动删除max-age为0的cookie
max-age: -1 : cookie的默认max-age的值, 表示这个cookie会话级别, 当浏览器关闭的时候, 浏览器把max-age=-1的cookie全部删除
max-age: >0 表示cookie最大存活时间(秒), setMaxAge(60), 表示cookie最大存活60秒, 60秒一过, 浏览器把该Cookie删除
max-age: 0 表示立即删除cookie
3.6 cookie的路径
可以通过设置Cookie的path来指定浏览器,在访问什么样的路径时,包含什么样的Cookie。
添加cookie的时候, 可以设置Cookie的path: setPath()
如果cookie没有设置path, 这个cookie的path默认为创建cookie资源的url的前缀路径