1. session是什么
前文说到,为了在无状态的HTTP协议中保持状态,cookie出现了。但是cookie是保存在客户端的,因此有两个问题,一是大小有限,二是用户可见,因此用户可修改,很不安全。这时候,session诞生了。
session是存在于服务器端的会话对象,session机制就是一种在客户端与服务器之间保持状态的解决方案。
2. session机制
session的机制基于session_id
当程序要为客户端的请求创建session时,首先要检查请求中是否包含一个session_id。如果已经包含,说明已经为这个客户端创建过session了;反之,就创建一个新的session,并且有唯一的session_id,这个id在响应中返回给客户端保存。
值得一提的是,session在服务端是用hash表的形式来保存的。
发给客户端的session_id通过cookie保存,一般name是JSESSIONID。如果不用cookie,还可以用url重写的方法,将session_id附在之后访问的URL后面。
3. 一个实例
来源 https://www.cnblogs.com/xdp-gacl/p/3855702.html
public class SessionDemo1 extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setCharacterEncoding("UTF=8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
session.setAttribute("data", "xqm");
String sessionId = session.getId();
if (session.isNew()) {
response.getWriter().print("session创建成功,sessionId = " + sessionId);
}
else {
response.getWriter().print("session已经存在,sessionId = " + sessionId);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
doGet(request, response);
}
}
4. session的销毁
默认存活时间是30分钟,可以在web.xml中修改。单位是分钟
<session-config>
<session-timeout>5</session-timeout>
</session-config>