一、会话技术
1、会话技术的存在意义
客户端访问服务器资源时,因为http请求是无状态的,服务端无法区分是哪一客户端的请求,所以需要会话技术识别客户端状态,帮助服务端记住客户端状态。2、会话技术
会话:打开浏览器进想网站资源访问开始, 一直到关闭浏览器,整个过程称为一次会话。
会话技术就是记录整个会话状态和数据的技术。
会话技术分为:session 和 cookie
Session:session是将状态数据存储在服务端,安全性相对较好,但是访问量过大会造成服务端压力过大。
cookie:cookie是将状态数据存储客户端,安全性较差,但是可以减少服务端压力,客户端可以清除Cookie。
二、Cookie技术
cookie技术是在客户端存储一次会话的状态数据,cookie携带与http协议请求头,可以在客户端进行清除,1、服务端发送cookie
1.1、cookie 的创建
Cookie Cookie = new Cookie(String CookieName, String CookieValue);
注意:Cookie不能为中文,也不可以是Object类型。
cookie:在服务端创建,
形式:键值对
1.2、设置cookie的作用路经
Cookie创建后,如果不设置路径, 默认作用于当前请求资源的所在路径都携带cookie,如:资源访问路径为:/App_web/servlet/sendCookie, 那么,在路径 IP:prot/App_web/servlet/路径下都会携带该cookie。
设置cookie作用路径:
cookie.setPath("/App_web/servlet"); //只有访问/App_web/servlet下的资源才携带cookie。
cookie.setPath("/App_web"); //只有访问/App_web下的资源才携带cookie。
1.3、设置cookie的生存时间
cookie创建后, 默认生存时间是一次会话有效,(也就是,打开客户端进行资源访问开始,到关闭客户端结束),但是有些时候因为业务需求,需要进行cookie持久化到客户端, 这个时候,需要使用设置生存时间来进行持久化cookie。
设置cookie生存时间:
cookie.setMaxAge(60*60*24*7);//设置时间的单位是秒;
1.4、向客户端发送cookie
如何将cookie发送到客户端:response.addCookie(cookie);
2、获得客户端发送的cookie
客户端访问服务端资源时,可能因为业务需求携带cookie,这时服务端就需要进行cookie的获取,
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookie.getName();
cookie.getValue();
}
三、Session技术
Session技术就是将会话状态数据存储在服务端的技术,Sessinon在用户第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。服务端在内存中开辟一块内存存储session的数据,用JSESSIONID唯一标识这块内存,然后返回JSESSIONID给客户端, 然后客户端每次访问服务端资源时只要携带这个id,就可以找到这次会话存储的数据。
1、获得Session对象
HttpSession session = request.getSession();
该方法会获得专属当前会话的Session,如果当前Session不存在,则该方法会创建一个,并将创建的session返回。
实质上是从客户端获取JESSIONID是否存在来判断服务端是否存在本次会话的Session内存空间。
2、向Session中存数据(Session也是一个域对象)
session.setAttribute(String name, Object obj);//将name对应的obj设置到session域中
session.getAttribute(String name);//获得session域中对应name的值
session.removeAttribute(String name);//删除session域数据值
3、Session生命周期
创建:Sessinon在用户第一次访问服务器时创建。(注意:只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,但是可以调用request.getSession(),强制创建。)
销毁:(1)、服务器关闭时,服务器关闭会销毁内存,所以创建的session域已经销毁。
(2)、tomcat服务器默认session过期时间是30分钟。(默认30分钟,这30分钟是从客户端从不操作与服务端连接开始算)。
可在web.xml中进行配置过期时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>
作用范围:默认在一次会话中,一次会话中公用一个session资源。