应用程序状态管理①隐藏表单字段②cookie③session④URL重写

应用程序状态管理:
服务器连接时无状态的,每次发送的请求对于服务器都是新的,而不知道两次是否是同一人发送的,为了解决应用程序状态,有4个常用方法:
表单隐藏字段:动态生成的才有效
cookie:记录在浏览器端,键值对,可见,不安全
session:记录在服务器端,也是键值对,服务器维护需要大量资源,可以设定有效时限
URL重写:在用户禁用cookie时,发送地址包含有会话ID

Cookie
是web服务器发送到客户端浏览器的简短文本信息,在第一次访问服务器后就由服务器向客户端浏览器发送,以后再访问同一个站点或域时浏览器就会毫无更改的返回该文本信息

存储的是键值对字符串数组
Cookie cookie=new Cookie("","")构造cookie对象,指定名称和值

cookie.setPath("/")设置cookie有效路径;如果不设置,默认同一个文件夹下才有效
cookie.setMaxAge()设置cookie存活时间,单位是:秒;如果不设置,默认cookie将会随着浏览器的关闭而消失
cookie.getMaxAge()得到cookie存活时间,单位是:秒
cookie.setName("")设置cookie的名称
cookie.getName()得到cookie的名称
cookie.setValue()设置cookie的值
cookie.getValue()得到cookie的值
使用HttpServletResponse对象的addCookie()方法将Cookie添加到响应头中
使用HttpServletRequest对象的getCookies()方法返回一个Cookie对象数组


Session
是一种客户端与服务器端保持状态的解决方案
Session对象是客户端与服务器端之间建立的互动信息状态对象,不同的用户连接将得到不同的Session

分为:1、HttpSession:记录会话
2、SQLSession:记录持久层连接数据库

创建Session对象:调用HttpServletRequest.getSession()、HttpServletRequest.getSession(true)得到一个已经有的Session,如果没有回创建一个新的Session
HttpServletRequest.getSession(false)得到一个已经有的Session,如果没有返回null

setAttribute("String","Object")在Session对象中用一个名字绑定一个对象
getAttribute("String")通过名字获得Session对象中的对象
removeAttribute("String")通过名字删除Session中的对应的对象
invalidate()会话结束
setMaxInactiveInterval()设置请求的最大间隔时间,单位:秒

<Session-config>
<Session-timeout>15</Session-timeout> 设置会话超时,单位:分钟
</Session-config>

销毁会话方式:
1、设置会话超时
2、在Session对象上调用invalidate()
3、应用结束

在超时时间内再次发送请求,http请求将发送保存SessionID的Cookie,响应不会产生新的SessionID值;一旦Session对象被销毁,所有绑定到该对象中的属性也会被销毁


Application(web应用上下文)域范围和Session域范围
Application(web应用上下文)中的对象在整个web应用程序运行过程中都被维护
Session范围内的对象仅仅在一个持续的会话期间被维护

原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5485234.html