状态管理

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文件(confweb.xml)
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    以上配置也可以放到某个应用的web.xml文件当中。
    方式二:
      setMaxInactiveInterval(int seconds);
 (5) 立即删除session
      session.invalidate();

走在一起是缘分,在一起走是幸福; 在一起走是缘分,走在一起是幸福
原文地址:https://www.cnblogs.com/tarena/p/3620181.html