会话跟踪
- 会话跟踪技术是为了解决http“无状态”特征所提出的一张解决方案,从开发者角度来讲,就是客户端上一次请求所传递的数据,如果持续到下一次请求,使服务器端可以通过传递的数据辨别出是否是同一个客户端
- 什么是一次会话
- 会话跟踪技术
- Cookie
- Session
- URL重写
- 隐藏表单域提交
- Cookie技术
- Cookie技术是在客户端浏览器保持会话跟踪技术的一种解决方案。用户第一次请求服务器时,服务器端将Cookie添加到响应中,浏览器接收到响应后会将其中的Cookie存起来(浏览器内存或者客户端的硬盘上),下一次请求会将Cookie自动加入到请求中
- Cookie的使用
- 创建Cookie对象
- Cookie userid= new Cookie("userid","1000001");
- 设置Cookie的属性
- setPath(url);设置Cookie的有效访问路径,如果传入“/”,同一个容器中,所有的应用都能访问该Cookie,如果不设置访问路径,默认只能由创建的应用访问。
- setMaxAge(seconds) 设置Cookie的有效时间,单位为秒。如果为整数,则过seconds秒后删除Cookie,如果为负数,表示该Cookie为临时Cookie,关闭浏览器即失效。默认为-1.
- setValue(newvalue) 设置Cookie的值
- Cookie的值不能设置为非ASCII码
- 将Cookie加入到响应中
- resp.addCookie(cookie)将cookie对象加入到响应中返回给浏览器
- 获取浏览器请求携带的cookie
- req.getCookies() 获取请求对象中的Cookie数组
- cookie.getName()获取cookie中属性名
- cookie.getValue() 获取cookie中的值
- req.getCookies() 获取请求对象中的Cookie数组
- 创建Cookie对象
- Cookie技术的特点
- Session会话跟踪
- Session会话是使用HttpSession对象,将数据存储在服务器的一种会话跟踪的解决方法
- 用户在第一次访问服务器(Servlet,jsp)的时候,web容器会创建一个HttpSession对象,在用户与服务器之间的多次交互都属于同一次会话,共享该HttpSession对象,除非HttpSession失效(开发者调用invalidate,或超出了会话的最大不活动时间)
- 获取HttpSession对象
- 通过请求对象的getSession()方法获取Session对象
- req.getSession();
- HttpSession常用的方法
- setAttribute(name,value) 往session域中添加名为name值为value的属性
- getAttribute(name) 获取session域中名为name的属性值
- removeAttribute(name) 从session中删除名为name的属性值
- invalidate()令session失效
- setMaxInactiveinterval(seconds)设置session的最大不活动时间(单位为秒),超出该时间没有狡猾的话,session,默认30分钟
- getMaxInactiveinterval()获取session的最大不活动时间
- 通过请求对象的getSession()方法获取Session对象
- Session的生命周期
- 从session会话建立开始,一直到session会话失效称为session的会话周期,session声明周期的结束有以下几种情况:
- 1、超出session的最大不活动时间,没有任何操作,session失效
- 2、代码中通过session对象调用invalidate()方法,使sesson失效
- 3、浏览器关闭,对应的session也失效
- 设置session的失效时间(优先级从高到低,影响范围从小到大)
- 在代码中使用setMaxInactiveInterval()设置,单位是秒,设置为-1代表永不过期
- session.setMaxInactiveInterval(15*60);//设置15分钟
- 在web.xml中通过设置如下标签的值来设置session的失效时间,单位是分钟
- <session-config>
<session-timeout>15</session-timeout>
</session-config>
- <session-config>
- 直接改tomcat中conf/web.xml中的配置(这样更改所有tomcat容器中的session的失效时间)
- <session-config>
<session-timeout>15</session-timeout>
</session-config>
- <session-config>
- 在代码中使用setMaxInactiveInterval()设置,单位是秒,设置为-1代表永不过期
- 从session会话建立开始,一直到session会话失效称为session的会话周期,session声明周期的结束有以下几种情况:
- URL重写技术
- 当浏览器禁用了Cookie,这种情况下,Cookie或者Session的会话跟踪就会失效,这种情况下,可以使用url重写技术来进行会话跟踪
- encodeURL() 可以对任何url进行重写
- encodeRedirectUrl() 针对重定向的url进行重写
- 重写过程中,如果浏览器禁用Cookie,则在重写URL时会加入jsessionid便于服务器端进行会话跟踪,如果浏览器没有禁用cookie,则重写url时,不会加入jsessionid
- 隐藏表单域技术