会话技术:
用户打开一个浏览器,点击多个超链接访问服务器的web资源,然后关闭浏览器,整个过程称为是一次会话.每个用户与服务器进行交互过程中,产生一些各自的数据,程序想要把这些数据进行保存,就需要使用会话技术.
Cookie技术
Cookie是客户端技术,程序把每个用户的数据以cookie的形式保存到各自的浏览器中.当用户再次访问服务器的web资源时,以前访问的数据就会带到服务器.
如果创建了一个Cookie,并发送到浏览器,默认情况下它是一个会话级别的Cookie。用户退出浏览器就被删除。如果希望将这个Cookie存到磁盘上,需要设置有效时长调用setMaxAge(int maxAge)方法,以秒为单位的。
Session技术:
Session是服务器端技术,利用这个技术,服务器在运行时为每一个用户的浏览器创建一个独享的session对象。由于session为用户浏览器独享,所有用户在访问服务器的时候,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源的时候,其他web资源再从用户各自的session中取出数据为用户服务。
Session对象由服务器创建,可以通过request的getSession()方法获取
Session的实现原理:基于Cookie回写了一个Session的ID.
Session作为域对象,作用范围就是一次会话的范围。一次会话,指的是用户打开浏览器点击多个超链接,访问服务器资源,到最后关闭浏览器的过程。
Cookie和Session比较
Cookie局限性:
Cookie保存的数据是有个数和大小的限制的。
数据是保存客户端浏览器上(相对不是很安全)
Session优势:
Session没有个数和大小限制。
数据是保存在服务器上(相对比较安全)
Servlet的域对象的总结
请求范围(ServletRequest)
创建与销毁
创建:当用户向服务器发送一次请求,服务器创建一个request对象。
销毁:当服务器对这次请求作出了响应,服务器就会销毁这个request对象
数据存取
存数据:
void setAttribute(String name,Object value);
取数据
Object getAttribute(String name);
作用范围
作用范围:一次请求。(转发就是一次请求)。
会话范围(HttpSession)
创建与销毁
创建:服务器端第一次调用getSession()方法的时候。
销毁:三种情况。
Session过期,默认的过期时间30分钟(web.xml中配置)。
非正常关闭服务器。(正常关闭服务器—session会被序列化)。
手动调用session.invalidate();
数据存取
存数据:
void setAttribute(String name,Object value);
取数据
Object getAttribute(String name);
作用范围
作用范围:一次会话(多次请求)
应用范围(ServletContext)
创建与销毁
创建:服务器启动的时候创建,为每个web项目创建一个单独ServletContext对象。
销毁:服务器关闭的时候,或者项目从服务器中移除的时候。
数据存取
存数据:
void setAttribute(String name,Object value);
取数据
Object getAttribute(String name);
作用范围
作用范围:整个应用