会话技术
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会 话技术就是记录这次会话中客户端的状态与数据的。
会话技术分为Cookie和Session:
- Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除cookie
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力
作用
存储客户端状态
Cookie
将用户的数据存储到客户端的技术
服务器端向客户端发送一个Cookie
- 创建Cookie:
Cookie cookie = new Cookie(String name,Stirng value); - 设置Cookie在客户端过期时间
Cookie.setMaxAge(intseconds)
单位:s - 设置Cookie的携带路径
Cookie.setPath(String path)
如果不设置携带路径,那么该cookie信息会在访问产生该cookie的 web资源所在的路径都携带cookie信息 - 向客户端发送Cookie
response.addCookie(Cookie cookie); - 删除客户端的Cookie:
如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时 间为0的cookie进行覆盖即可
服务器端怎么接受客户端携带的Cookie
- 通过request获得所有的Cookie
Cookie[] cookies = request.getCookies(); 遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie
1
2
3
4
5for(Cookie cookie:cookies){
if(cookie.getName().equals(cookieName)){
String cookieValue = cookie.getValue();
}
}方法
- getName()
获得Cookie名称 - getValue()
获得Cookie的值
Session
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客 户的唯一性标识JSESSIONID
获得Session对象
HttpSession session = request.getSession()
根据JSESSIONID判断该客户端是否在服务器上已经存在session了
向Session中存取数据
session也是一个域对象
- session.setAttribute(String name,String value)
- session.getAttribute(String name)
- session.removeAttribute(String name)
Session对象的生命周期
- 创建
第一次执行request.getSession()时创建 - 销毁
- 服务器非正常关闭
- session过期/失效(默认为三十分钟)
可以在工程中配置:
30 - 手动销毁session
session.invalidate();
方法
- isNew()
判断当前session是不是新创建的 - invalidate()
强制使Sessio对象无效 - getServletContext()
返回ServletContext对象 - getLastAccessedTime()
返回客户端最后一次发送与Session相关请求的时间 - getCreationTime()
返回Session创建时间 - getID()
返回与当前HttpSession对象关联的会话标识号