1.什么是Session?
- 服务器会给每一个用户(浏览器)创建一个
Session
对象; - 一个
Session
独占一个浏览器,只要浏览器没有关闭,这个Session
就存在; - 用户登陆之后,整个网站他都可以访问!(保存用户的信息,保存购物车的信息…)
2.Session与Cookie的区别
Cookie
是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)Session
把用户的数据写到用户独占的Session中,服务端保存(保存重要的信息,减少服务器资源的浪费)Session
对象由服务创建
3.使用场景
- 保存一个登录用户的信息
- 购物车信息
- 在整个网站中经常会使用的数据,我们将它保存在
Session
中
4.使用例
public class SessionServlet 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");
HttpSession session = req.getSession();
session.setAttribute("name",new Person("老王",1));
String sessionId = session.getId();
if (session.isNew()){
resp.getWriter().write("session创建成功,id:"+sessionId);
}else{
resp.getWriter().write("session已经存在,id:"+sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
public class SessionServlet1 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");
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
public class SessionServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>SessionServlet</servlet-name>
<servlet-class>com.young.servlet.SessionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionServlet</servlet-name>
<url-pattern>/s</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SessionServlet1</servlet-name>
<servlet-class>com.young.servlet.SessionServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionServlet1</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SessionServlet2</servlet-name>
<servlet-class>com.young.servlet.SessionServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionServlet2</servlet-name>
<url-pattern>/s2</url-pattern>
</servlet-mapping>
5.会话自动过期
<session-config>
<session-timeout>1</session-timeout>
</session-config>