状态管理的方案: 隐藏表单 cookie session URL重写
- 什么叫会话:
客户端对服务器访问—–>关闭浏览器,才算一次会话 - 会话解决的问题?
用户访问服务器,想要存储当前的状态 - cookie
cookie是客户端的技术,程序把每个用户的数据都通过键值对的方式保存到cookie,cookie存放在客户端
下次请求的时候,将cookie放在请求头里面,再次访问服务器时,服务器就可以根据cookie里面的内容来判断当前用户的状态
表单隐藏字段
对用户在网站上的访问进行会话跟踪
为服务器程序提供预定义输入
存储动态产生的页面上下文信息
可以区分多个表单提交,可以保存当前用户操作表格的状态。
> 防止表单重复提交,保存用于的登录状态
cookie
response.getCookie();//得到cookie
.getName();//cookie的名字
.getValue();//cookie的值
response.addCookie();//返回给客户端
//cookie的默认消失时间是会话结束
//设置最大时间,时间以秒作为单位,将cookie保存在硬盘
//将时间设置为0,将销毁cookie
cookie名字.setMaxAge(20);
session
- 服务器端的技术,利用这个技术。我们可以每一个浏览器(用户)创建一个独享的session对象。
- session流程
服务器请求服务器->创建一个session,
将sessionID保存cookie里面,
在将cookie发送回客户端
客户端再次请求,就将cookie发送给服务器,
服务器取出sessionID去匹配所有的session,
.getSession()//得到一个session对象,返回一个httpSession对象,session不能new出来
.getid()//得到sessionID
.isNew()//判断session是新的还是以前的session
.setAttribute(“键”,"值");//添加属性
.getAttribute("键")//返回属性值,object类型,需要强转为String
.setMaxInactiveInterval(10)//设置session的销毁时间(最长不活动时间),以秒为单位
.invalidate()//立即销毁session
//可以在xml文件里配置,只能是整数,以分钟作为单位
<session-config>
<session-timeout>1</session-timeout>
</session-config>
//设置session的销毁时间,也要记得cookie的销毁时间,可以覆盖默认的cookie设置.setMaxAge(20);
URL重写
- url重写是容器自动完成的,我们只需要对url进行编码
- cookie和url重写工作的时候,cookie优先,所以以后为了防止用户屏蔽cookie可以将两个技术用在一起
response.encodeURL(项目地址);
//对重定向的url进行编码
response.encodeRedirectURL();