Servlet(二) 会话管理
会话管理
由于HTTP的无状态性,默认情况下,服务器无法区分HTTP请求的是否是第一次请求
-
URL重写 将n个token(key=value)添加刀URL的查询字符串中
- url?key1=value1&key2=value3...
- 某些浏览器有url长度限制2000字符
- 静态页面很难传值
- url中的特殊符号需要特殊编码
- 传递的信息是可见的
-
隐藏域 仅仅在表单提交时有效
- 没有在url中无需额外编码,且没有大小限制
- 同样不适合多页面传值
-
Cookies 解决跨页面传递信息
-
可自动在浏览器和web服务器交互
-
cookie作为HTTP header的一部分
-
cookie可手动设置有效时间
-
缺点:用户可以禁用cookie
-
javax.servlet.http.Cookie接口
Cookie cookie = new Cookie("cookieTest", "QCookie"); cookie.setPath("/firstServlet.do"); cookie.setMaxAge(60 * 60 * 24); 单位s response.addCookie(cookie);
-
服务端可以获取浏览器请求时携带的cookie
Cookie[] cookies = request.getCookies(); String token = ""; for (Cookie cookie : cookies) { switch(cookie.getName()){ case "token": token = cookie.getValue(); break; default: break; } }
-
-
HttpSession 最通用,一个用户有且仅有一个HttpSession对象
-
用户第一次访问服务器时被自动创建
-
获取方法
HttpSession getSession(boolean var1); HttpSession getSession(); void setAttribute(String var1, Object var2);
-
session是存储在内存中的,可以存入任意实现Serializable接口的对象
HttpSession session = request.getSession(); session.setAttribute("seeee","session"); System.out.println(session.getId());
-
session不会发送给客户端,但是servlet容器为每个session生成的唯一表示,会写入cookie中写给客户端
-
session默认过期时间30min,可以在部署描述符web.xml中配置<session-timeout>
-