状态管理的方案
1.hidden表单隐藏
2.Cookie
3.Session
4.Url重写
什么叫做会话。
会话:打开浏览器,通过超链接或者按钮访问服务器,关闭浏览器。称为一次会话。
Web应用程序状态管理
http协议使用的是无状态的连接。每个请求对容器来说都是新的客户。
隐藏字段
<input type=“hidden” name=”session” value=”..”>
1.对用户在网站上的访问进行回话跟踪
2.为服务端程序提供预定义输入
3.存储动态产生的页面上下文信息。
Hidden 可以区分多个表单提交,可以保存当前用户操作表格的状态,防止表单重复提交,保存用户的登录状态。
会话解决的问题
用户访问服务器,想要存储当前的数据。
Cookie:
客户端技术 ,程序把每个用户的数据通过键值对的方式保存到cookie。下次请求的时候就将cookie放到请求头里面,服务器就能够根据cookie里面的内容来判断当前用户的状态。
Getcookies 获得所有的cookie返回一个cookie数组
创建一个cookie ck=new cookie
Resp.addcookie(ck);添加到resp中
保存对话
Ck.setMaxage(2000);设置最大寿命。 秒为单位。
设置过期时间会将cookie保存到硬盘。
销毁cookie
Setmaxage(0);
Session :服务器端的技术。
我们可以为每一个浏览器 创建一个独享的session对象
Seesion 流程
客户端请求服务器 -->创建一个seesion,将sessionid 保存到cookie里面
再将cookie发生回客户端,客户端在再次请求时,就将cookie发送给服务器
,服务器取出seesionid去匹配所有的session,返回匹配到的session。
Req.getsession 创建一个session,返回httpsession对象。
计算机底层如何用cookie 与 session进行匹配:
获取cookie里面的id和session的id 进行匹配,匹配成功返回当前session对象,匹配失败,创建一个session。
Session.getid(); 获取session对象id
Session.isnew(); 可以判断session是新创建的还是已经存在的session。
Seesion.setattribute(“key”,”value”) 设置seesion
Seesion.getattribute(“”)
Req.getsession(false); 自动匹配seeionid,配成功返回session,匹配失败返回null;
SetMaxInactiveInterval(10);设置session销毁时间 最长不活动时间
Invalidate() 立即销毁。
在配置文件中销毁--
<session>
<Session-timeout>分钟数</session-timeout> 最长不活动时间
</session>
设置cookie保存sessionid
Cookie ck= new cookie(“jsessionid”,req.Getsession().getid())
Ck.setmaxage()//设置最大保存时间
Resp。Add(ck)//添加到resp中
Session和上下文的区别
每个用户(浏览器)有一个session, Session是所有servlet都共享,上下文对象是所有用户都共享。
Url 重写
获取工程名字:
String path= req.getContextPath()+req.getServletPath(); 得到工程名 和 服务器地址
Sting newpath= Resp .encoderUrl(path) 调用容器的方法 对path进行重新编码 ,容器自动完成。(页面跳转时)
String newurl Resp.encodeRedirect(path) 重定向是使用的url重写
cookie和url重写都工作的时候,cookie优先,为了防止用户屏蔽cookie可以将两个技术用在一起。