状态管理
1、状态管理
	  (1)什么是状态管理
		将客户端(浏览器)与服务器之间多次交互当做一个整体来看待,并且将交互所涉及的数据保存下来。
	(2)如何进行状态管理
		  第一类方案:将状态保存在客户端(浏览器),
		  比如cookie技术。
		  第二类方案:将状态保存在服务器端,
		  比如session技术。
Cookie*
	  (1)什么是cookie?
		  浏览器访问服务器时,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将之前保存的数据以cookie消息头的方式发送给服务器。
	(2)如何创建cookie?
		  Cookie cookie =
			     new Cookie(String name,String value);
		  response.addCookie(cookie);
	(3)如何查询cookie
		  //如果没有cookie,返回null
		  Cookie[] request.getCookies();
		  String cookie.getName();
		  String cookie.getValue();
	(4)编码问题
		  cookie的值如果是中文,需要将其转换成
		  ascii字符。
		  String URLEncoder.encode(String str,String code);
		
		  String URLDecoder.decode(String str,String code);
		
	(5)生存时间
		  cookie.setMaxAge(int seconds);
		注意:
			    seconds:秒
			    seconds > 0: 浏览器会将cookie保存在硬盘上,如果超过指定的时间,浏览器会删除该cookie。seconds < 0: 默认值,浏览器会将cookie保存在内存里面,如果浏览器关闭,cookie会被删除。seconds = 0: 删除cookie
			  	  比如,要删除一个名称为username的cookie
			  		  Cookie c = new Cookie("username","");
			  		  c.setMaxAge(0);
			  		  response.addCookie(c);
	(6)cookie的路径问题
		  a,什么是cookie路径问题?
		  浏览器在向服务器的某个地址发请求时,会比较cookie的路径是否与要访问的地址匹配,只有匹配的cookie,才会发送给服务器。
		b,匹配规则
			  只有当要访问的地址是cookie的路径或者是其子路径时,浏览器才会将对应的cookie发送给服务器。
		c,cookie的默认的路径
			  cookie的默认的路径等于创建该cookie的组件的路径。
		d, 可以调用 cookie.setPath(String path)来修改
		默认的路径。
			  一般调用  cookie.setPath("/appname");
			  cookie的路径: /web07/app1
(7)cookie的限制
		  a, cookie可以被浏览器禁止。
		  b, cookie能够保存的数据大小有限制(4k左右),
		  并且浏览器最多能够保存的cookie的数量也有限制(大约是300)。
		  c, cookie不安全。
		  d,cookie只能够保存字符串。
Session*
session
	(1)session是什么?
		  浏览器访问服务器时,服务器会创建一个特殊的对象(session对象,该对象有一个唯一的id号,称之为sessionId),接下来服务器在默认情况下,会使用cookie机制将sessionId发送给浏览器,浏览器会将sessionId保存下来(内存);当浏览器再次访问服务器时,浏览器会将sessionId发送给服务器,服务器依据sessionId就可以找到之前所创建的session对象。
	(2) 如何获得一个session对象?
		  a,方式一:
			  HttpSession session = request.getSession();
			  等价于request.getSession(true)。
		b,方式二:
			  HttpSession session = 
				      request.getSession(boolean flag);
			  当flag为true:
				    服务器会查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,服务器会依据sessionId查找对应的session对象,如果找到,则返回,
			  如果找不到,则创建一个新的session对象。
  当flag为false:
				  服务器会查看请求当中是否有sessionId,如果没有,返回null;	如果有sessionId,服务器会依据sessionId查找对应的session对象,如果找到,则返回,如果找不到,返回null。
	(3)HttpSession接口提供的一些常用方法
		  a, String getId();
		  b, session.setAttribute(String name,Object value);
			  //如果name对应的值不存在,返回null。
			  Object getAttribute(String name);
			  //解除绑订
			  removeAttribute(String name);
	(4)session的超时
		  a,什么是session的超时?
			  服务器会将一些空闲时间过长的session对象
		  删除掉。服务器缺省的超时限制是30分钟。
		  b,修改超时的时间
			    方式一:改服务器的配置文件,比如,
		        可以修改tomat的web.xml文件(conf\web.xml)
				        <session-config>
        			            <session-timeout>30</session-timeout>
    			        </session-config>
    		    以上配置也可以放到某个应用的web.xml文件当中。
    		    方式二:
    			      setMaxInactiveInterval(int seconds);
   	 (5) 立即删除session
   				      session.invalidate();		
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号