Cookie
Cookie的默认作用范围:作用于当前目录以及当前目录的子目录; 可有通过Cookie.setPath()设置Cookie的作用范围,一般设为:
cookie.setPath(request.getContextPath());
Cookie删除通过:
cookie.setMaxAge(0):里面的以秒为单位
cookie的持久化:通过setMaxAge方法设置其存活时间,浏览器关闭重启,只要存活时间没到,cookie依然有效
Session
Session的常用方法
- getId()
- isNew()
- getLastAccessedTime()
- getMaxInactiveInterval()
- getAttribute
- setAttribute
Session 的创建
注意:jsp页面 Page指令的属性session="false"表示:当前JSP页面禁用session隐含变量,但可以使用其他的显示的session对象:比如:
Session session = request.getSession(false);
- 默认情况下,
- 对于JSP页面来说:第一次访问一个 WEB 应用的一个 JSP页面时,该页面都必须有一个和这个请求相关联的 Session 对象. 因为 page 指定的 session 属性默认为 true
- 对于 Serlvet:若Serlvet是客户端访问的第一个 WEB 应用的资源,则只有调用了request.getSession() 或 request.getSession(true) 才会创建 HttpSession 对象
-
若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关,所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session 对象.
-
创建一个 Session 对象: 若 page 指定的 session 设置为 false 或 在 Servlet 中可以通过以下 API 获取 Session 对象. request.getSession(flag): 若 flag 为 true, 则一定会返回一个 HttpSession 对象, 如果已经有和当前 JSP 页面关联的 HttpSession 对象, 直接返回; 如果没有, 则创建一个新的返回. flag 为 false: 若有关联的, 则返回; 若没有, 则返回 null
request.getSession(): 相当于 request.getSession(true);
Session 对象的销毁:
注意: 关闭浏览器不会销毁 Session!(关闭浏览器只会使存储在客户端浏览器中的session cookie失效,不会使服务端的session对象失效)
- 直接调用 HttpSession 的 invalidate()
- HttpSession 超过最大有效时间.
- 卸载当前 WEB 应用.
返回最大时效: getMaxInactiveInterval() 单位是秒
-
设置最大时效: setMaxInactiveInterval(int interval)
-
可以在 web.xml 文件中配置 Session 的最大时效, 单位是分钟.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
使用Cookie来跟踪Session
session通过SessionId来区分不同的客户,Session是以Cookie或URL重写为基础,默认使用Cookie来实现,当浏览器不支持Cookie或者浏览器禁用Cookie,使用URL重写的方式(即response.encodeUrl(XXX))
URL重写
1.WHY? Servlet规范中引入一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话
2.WHAT? 将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写
3.HOW ?
<a href="<%= response.encodeURL("login.jsp") %>">XXX</a>