会话跟踪技术
定义和作用
作用是解决Http协议的无状态性
1、客户端技术
Cookie技术
URL重写
隐藏表单域技术
2、服务端技术
数据库技术
(Http)Session技术(会话)
Cookie技术
浏览器有临时目录,有用于存放Cookie信息的文件(一个网站‘Web应用’有独立的Cookie文件)
浏览器接收到响应后自动将响应中的Cookie信息写入Cookie文件(响应头的形式)
浏览器发送请求的时候,自动会将有效Cookie信息随同请求一起提交给服务器(请求头的形式)
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//读取浏览器传递过来的Cookie信息
Cookie[] cookies = req.getCookies();
System.out.println("readCookie========");
if(cookies!=null)
{
for(Cookie cookie:cookies)
{
System.out.println(cookie.getName()+"-------->"+cookie.getValue());
}
}
//写Cookie
//创建Cookie对象
Cookie cookie1 = new Cookie("username","aa");
Cookie cookie2 = new Cookie("age","20");//Cookie不支持汉字
cookie1.setMaxAge(300);//Cookie有效期单位秒,没设置默认浏览器关闭就消失
//将Cookie写入res响应对象,若传输很多个一样的,只有最后一个有效
res.addCookie(cookie1);
res.addCookie(cookie2);
}
可用于单点登录(多长时间不用再登陆),示例代码如下:
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//获取登陆标记,有则登陆,无则获取用户名密码
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
Cookie[] cookies = req.getCookies();
if(cookies!=null&&containLoginFloag(cookies))
{
out.println("登陆成功");
}else
{
String name = req.getParameter("userName");
String pass = req.getParameter("passWord");
if(name!=null&&!"".equals(name))
{
Cookie cookie = new Cookie("YES", "1");
res.addCookie(cookie);
out.println("登陆成功");
}else{
out.println("登陆失败");
}
}
Cookie cookie = new Cookie("YES", "1");
cookie.setMaxAge(24*60*60);
res.addCookie(cookie);
}
private boolean containLoginFloag(Cookie[] cookies)
{
boolean bool = false;
if(cookies!=null)
{
for(Cookie cookie:cookies)
{
System.out.println(cookie.getName()+"---------->"+cookie.getValue());
if("YES".equals(cookie.getName()))
{
bool = true;
break;
}
}
}
return bool;
}