Session会话(重点)
什么是session
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
- 用户登录之后,整个网站他都可以访问—>保存用户的信息;保存购物车的信息
Session技术,底层其实是基于Cookie技术来实现的
Session和Cookie的区别
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- Session把用户的数据写到用户独占Session中,服务器保存(保存重要的信息,减少服务器资源的浪费)
- Session对象由服务创建
Session使用场景
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中,经常会使用的数据,我们将它保存在Session中
代码演示
//为了简洁 把导入的包去掉了...
public class SessionDemo01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@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","张三");
//Person类有两个属性 name和age
session.setAttribute("name",new Person("李四",1));
//获取session的ID
String sessionId = session.getId();
//判断session是不是新创建
if(session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else{
resp.getWriter().write("session已经存在了,ID:"+sessionId);
}
// //session创建的时候做了什么事情
// Cookie cookie = new Cookie("JSESSIONID", sessionId);
// resp.addCookie(cookie);
}
}
//得到session
HttpSession session = req.getSession();
//String name = (String) session.getAttribute("name");
Person name = (Person) session.getAttribute("name");
resp.getWriter().print(name);//.print对象也能输出 .write不能输出对象
//手动注销,有另一种在web.xml中注销
//session.removeAttribute("name");
//session.invalidate();
session.setMaxInactiveInterval(30);//单独设置时长(设置当前session30秒后超时)
session.getMaxInactiveInterval();//获取session的超时时间(默认30分钟)
会话自动过期:web.xml配置
<session-config>
<!-- 15分钟后session自动失效 ,以分钟为单位 -->
<session-timeout>15</session-timeout>
</session-config>