【会话技术】
一次会话:用户打开浏览器访问一个页面开始,多次访问页面,到最后关闭浏览器的过程称为是一次会话.
【常见的会话技术】
Cookie
是一种客户端的技术,将数据保存到客户端浏览器的内存中.
Session
是一种服务器端技术,将数据保存到服务器端.
【Cookie的使用的小结】
// 获得Cookie:
Cookie[] request.getCookies();
// 向浏览器回写Cookie:
response.addCookie(Cookie cookie);
// 构造Cookie
Cookie(String name,String value);
【Cookie的分类】
会话级别Cookie:默认的.关闭浏览器Cookie就会被销毁.
持久级别Cookie:将Cookie保存到本地的硬盘上.
Cookie的API:
* String getName();
* String getValue();
* void setDomain(String str);
* 设置Cookie有效域名.
* void setPath(String str);
* 设置Cookie的有效路径.setPath(“/WEB11”);
* void setMaxAge(int maxAge);
* 设置Cookie的有效时长.setMaxAge(0); --- 删除持久的Cookie.(有效路径必须一致.)
【Cookie的注意事项】
Cookie保存的时候一个浏览器上对Cookie的个数和大小都是由限制的.
Cookie默认不能保存中文.
*URLEncoder.encode();
*URLDecoder.decode();
/**
* 步骤一:在CountServlet中编写代码.
步骤二:获得从客户端带过来的所有的Cookie.
步骤三:从客户端带过来的所有的Cookie中查找指定名称的Cookie.
步骤四:判断是否是第一次访问:
如果没有查找到:就是第一次访问
显示欢迎
如果查找到:不是第一次访问
显示上次访问时间
步骤五:记录当前的时间,回写到浏览器.
*/
Cookie[] cookies = request.getCookies(); //Cookie
// 调用工具查找指定名称的Cookie:
Cookie cookie =CookieUtils.findCookie(cookies, "lastVisited");
// 判断:
if(cookie == null){
// 第一次访问
response.getWriter().println("
}else{
// 不是第一次
// 获得上次访问时间:
longlastVisited = Long.parseLong(cookie.getValue());
Datedate = new Date(lastVisited);
response.getWriter().println("
}
long time = System.currentTimeMillis();
// 回写到浏览器:
Cookie c = new Cookie("lastVisited",""+time);
response.addCookie(c);
【Session会话】
Cookie有大小和个数的限制的.
而且Cookie数据保存在客户端数据.
Session保存在服务器端,没有大小的限制.
【Session域对象】
ServletContext :适合共享数据.
* 生命周期:
* 服务器启动的时候创建.
* 服务器关闭的时候销毁.
* 作用范围:
* 整个web应用.
HttpSession :私有的数据.登录用户的信息.
* 生命周期:
* 服务器端第一次调用getSession()方法时候.才会创建一个session对象.
* session销毁三种情况:
*session过期:默认过期时间30分钟.
* 非正常关闭服务器:(正常关闭服务器序列化到硬盘)
* 调用session.invalidate();
* 作用范围:
* 多次请求(一次会话)
HttpServletRequest :
* 生命周期:
* 客户端向服务器发送请求的时候,服务器创建一个请求对象.
* 服务器对这次请求作出响应之后.请求对象就会被销毁.
* 作用范围:
* 一次请求