JavaWeb 笔记之 Cookie 和 Session

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);
  1. 默认情况下,
  • 对于JSP页面来说:第一次访问一个 WEB 应用的一个 JSP页面时,该页面都必须有一个和这个请求相关联的 Session 对象. 因为 page 指定的 session 属性默认为 true
  • 对于 Serlvet:若Serlvet是客户端访问的第一个 WEB 应用的资源,则只有调用了request.getSession() 或 request.getSession(true) 才会创建 HttpSession 对象
  1. 若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关,所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session 对象.

  2. 创建一个 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() 单位是秒

  1. 设置最大时效: setMaxInactiveInterval(int interval)

  2. 可以在 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>

猜你喜欢

转载自blog.csdn.net/wm1203618455/article/details/82624529
今日推荐