session的原理及应用
原理
1.
1.
1. 服务器会给每一个用户(浏览器)创建一个Seesion对象;
2.
2.
2. 一个Session独占一个浏览器,只要浏览器没有关闭(不断开tomcat或不清除JSESSIONID)(网页关闭不影响),这个Session就存在;
3.
3.
3. 用户登录之后,整个网站它都可以访问!–> 保存用户的信息;保存购物车的信息……
4.
4.
4. Session的创建通过cookie完成
//Session创建的时候做了什么事情;
Cookie cookie = new Cookie("JSESSIONID",sessionId);
resp.addCookie(cookie);
储存用户信息
1.
1.
1. 通过Session储存对象等信息;一个Session独占一个浏览器,只要浏览器不关闭(不断开tomcat或不清除JSESSIONID)(网页关闭不影响),JSESSIONID一直是同一个,因此可以实现跨Servlet访问数据。
2.
2.
2. 存储用户信息时一般采用Session,而不用Context,因为Context资源有限。
//获取客户端的session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("冰墩墩",1));
手动注销
//手动注销Session
session.invalidate();
具体代码
/**
* @author tl
* 取出客户端Session,并存入数据
*/
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//获取客户端的session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("冰墩墩",1));
//取出sessionID
String sessionID = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功");
}else {
//sessionID并不是存进去的name
resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionID);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
/**
* @author tl
* 取出客户端Session,并取出数据
*/
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取客户端的session
HttpSession session = req.getSession();
Person baby = (Person)session.getAttribute("name");
System.out.println(baby.toString());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Session会话的寿命
参考资料:https://blog.csdn.net/stanxl/article/details/47105051