1.会话:打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器,整个过程称之为一个会话。
因为http是无状态的连接协议,为了使会话产生的数据能够在下一次请求中使用,需要解决http无状态连接
解决方案会话跟踪技术。
会话跟踪技术是一种在客户端与服务器间保持HTTP状态的解决方案,
所谓管理,管理浏览器客户端和服务器端之间会话过程中产生的会话数据。
技术:
Cookie技术
Session技术
URL重写技术
隐藏表单域技术
(1) Cookie技术:
在客户端保持会话数据。
Cookie在用户第一次访问服务器时,由服务器通过响应头的方式发送给客户端浏览器;
当用户再次向服务器发送请求时会附带上这些文本信息。
//SetCookieServlet设置cookie
response.setContentType("text/html;charset=utf-8");
//1.创建cookie对象
Cookie c1=new Cookie("username","chenxx");
Cookie c2=new Cookie("age","18");
//2.设置cookie(过期时间)
c1.setMaxAge(60*60);//秒
c2.setMaxAge(60*60);//秒
//3.添加cookie响应给客户端
response.addCookie(c1);
response.addCookie(c2);
//GetCookieServlet获取cookie
Cookie cookies[]= request.getCookies();
for (Cookie obj : cookies) {
System.out.println("属性名"+obj.getName());
System.out.println("属性值"+obj.getValue());
}
2)cookie应用:记住密码
3)cookie缺点:浏览器可以禁用cookie,删除cookie,在响应中设置不安全
2)session技术
HttpSession对象完成,每一个会话,服务器会分配唯一标识会话的JSESSIONID,JSESSIONID存在cookie中
Session和Cookie的主要区别在于:
Cookie是把用户的数据保存在用户的浏览器中。
Session把用户的数据保存在服务器中中。
SessionServlet.java
//1.获取session对象
HttpSession session=request.getSession();
String sid=session.getId();//获取sessionid
response.getWriter().print(request.getHeader("Host")+":"+sid);
System.out.println(request.getRemoteAddr()+":"+sid);
//2.设置session
session.setAttribute("user", "你好,tom");
session.setAttribute("pass", "1234");
//3.重定向
response.sendRedirect("index.jsp");
index.jsp
<%=session.getAttribute("user") %>
<%=session.getAttribute("pass") %>
<a href="LogOutServlet">退出</a>
LogOutServlet.java
//清除session
HttpSession session=request.getSession();
session.removeAttribute("user");
session.removeAttribute("pass");
response.sendRedirect("index.jsp");
3)其他会话管理技术
1.URL重写技术
response.encodeURL("UserServlet")
response.sendRedirect(response.encodeRedirectURL("EncodeURLServlet"));
2. form表单隐藏域
利用Form表单的隐藏表单域,在用户无法从页面显示看到隐藏标识的情况下,将标识随请求一起传送给服务器处理,从而实现会话的跟踪。
在Form表单中定义隐藏域
<input type="hidden" name="userID" value="10010">
在服务器端通过HttpServletRequest对象获取隐藏域的值
String flag = request.getParameter("userID");