11. 同一用户共享不同页面的数据
1)cookie技术
服务器保存客户端的信息,例如保存用户名,密码。服务器获得这些信息后,需要回写到客户端的某个目录。这样服务器在使用的时候可以从客户端读取Cookie中的信息。
实现功能:
* 保存用户名密码,在一定时间内不需要登录
* 记录用户访问网站的喜好
* 网站的个性化,可以定制网站服务器等。
2)sendRedirect()转向
通过该方法将信息传递给下一个页面:比如sendRedirect(“welcome?uname=shunping”);
优点:传递信息的速度比较快
缺点:只能传递字符串,不能传递对象等其他信息
sendRedirect(“welcome?uname=shunping”);
注:
1. welcome代表要跳转的那个servlet的url
2. servlet url名和变量之间有?号
3. 如果传递两个以上值,需要使用&号分开,例如:
sendRedirect(“welcome?uname=shunping&&pass=ok”);
4. 如果传递的是中文,那么可能会得到乱码,需要进行处理。
注意每一个参数获取时要与发送是相同
例如参数发送的代码如下:
res.sendRedirect("welcome?usrname=" + u + "&&passwd=" + p);
// 从loginhandle中得到或得的用户名
String u = req.getParameter("usrname");
// 从loginhandle中获得密码
String p = req.getParameter( "passwd");
参数获取时,usrname要与发送时完全相同,否则获得的值为null。
3)隐藏表单
最常见的一种方式,也是最简单的一种,但是这种技巧非常管用
它使用的是html中的隐藏表单,因为隐藏表单除了不显示以外,其他的功能都有。既有名字也有动作。
例如隐藏表单:
<form action=login >
<input type=hidden name=a value=b>
</form>
4)session技术
当用户打开浏览器,访问某个网站,被访问的服务器就会在服务器中为该浏览器分配一个内存,该空间被这个浏览器独占。
这个空间就是session空间,该空间中的数据默认存在时间是30min,可以进行修改。
完成功能:
* 网上商城中的购物车
* 保存登录用户的信息
* 将某些数据放入到session中,供同一个用户的各个页面使用
* 防止用户非法登录到某个页面
如何理解session:
* session可以看做一张表,这个表有两列,多少行没有限制,每一个就是session 的一个属性。包含了两部分,名字和名字对应的值。
使用session:
1)得到session
HttpSession hs = request.getSession(true);
2) 向session添加属性
hs.setAttribute(String name, Object val);
3)从session中得到一个属性的值:
String name = hs.getAttribute(String name);
4) 从session中删除摸个属性值:
hs.removeAttribute(String name);
上面说过,session的时间是有限制的,超过一定时间没有访问某一个值,这个值就会被删除掉。
要修改session的保存时间,在tomcat下的conf目录下的web.xml中进行修改。
找到session-config标签,即可修改session的时间。这个时间是用户的发呆时间,也就是用户登录在本网站,但是并没有进行任何动作了。
5) 当浏览器访问某个网站时,服务器会给浏览器分配一个唯一的session ID,并以此来区分不同的浏览器(即客户端)。
Session 的各个属性都要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用。
使用Session共享数据,使用记录登陆成功为例:
(1) // 将验证成功的信息写入session
HttpSession hs = req.getSession(true);
// 为了测试,修改session的存在时间
hs.setMaxInactiveInterval( 20);
// 将登陆成功设置进session
hs.setAttribute("pass", "ok");
(2) 取出session的数据,根据数据进行处理
// 得到session
HttpSession hs = req.getSession(true);
String val = (String)hs.getAttribute("pass");
if(val == null)
{
try
{
res.sendRedirect("login");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}