Session对象(重点)
1.Session概述
- Session用于记录用户的状态。Session是指在一段时间之内,单个客户端与Web服务端的一连串的交互过程。
- 在一个Session中,客户可能会多次请求访问各种不同的服务器资源
2.Session原理
- 服务器会为每一次会话分配一个Session对象
- 同一浏览器发起的多次请求,同属于一次会话(Session)
- 首次使用Session时,服务器会自动创建session,并创建Cookie存储SessionId发送回客户端
3.Session的使用
①:获取session
@WebServlet("/ss")
public class CookieServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 通过request对象获取Session对象
HttpSession session = req.getSession();
// 获取sessionid
System.out.println(session.getId());
}
}
我们使用浏览器对网站进行访问,我们会发现打印
在浏览器当中会有
当我们关闭浏览器,重新打开访问项目我们会发现session变了
②:Session保存数据
setAttribute(“key”, value)保存数据到session中
session.setAttribute("key", value); //以键值对的形式存储在session当中
③:Session获取数据
getAttribute(“key”)获取session中的数据
session.getAttribute("key"); // 通过String类型的key访问Object类型的value
④:Session移除数据
removeAttribute(“key”)从session中删除数据
session.removeAttribute("key"); // 通过key值删除session中的值
4.Session的生命周期
开始:第一次使用到session的请求产生则创建session
结束
- *浏览器关闭
- *session超时失效
- session.setMaxInactiveInterval(interval)
- *手动销毁失效
- session.invalidate();
5.浏览器禁用Cookie后使用Session解决方案
浏览器在默认情况下,会使用cookie的方式将sessionID发送给浏览器,如果用户禁用Cookie,则sessionID不会被浏览器保存,此时浏览器可以使用URL重写这样的方式发送sessionID
①:URL重写
浏览器在访问服务器上的某个地址时,不在使用原来的地址,而是使用经过该写的地址(在原来的地址上边加上sessionID)
②:实现URL重写
response.encodeRedirectURL(url)
@WebServlet("/ss")
public class SetSession extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
// 重写 URL 追加 SessionID
String newUrl = response.encodeRedirectURL("/SecondServlet/gs");
System.out.println(newUrl);
response.sendRedirect(newUrl); //重定向到我们要跳转页servlet
}
}
@WebServlet("/gs")
public class GetSession extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// 1. 通过request对象获取Session对象
HttpSession session = req.getSession();
// 获取sessionid
System.out.println(session.getId());
}
}
输出
实际情况是我们在url上边加上了sessionID