从逻辑角度讲,我们应该会这样做,因为创建Session的目的,在于保存会话信息,所以要把SessionID传给浏览器,以便后面的请求能找到服务器中自己的Session,来获取自己的会话信息。
我们来分析下源代码
以下面的代码为例
public class IndexServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决乱码问题
response.setContentType("text/html;charset=utf-8");
// 创建或者获取保存用户信息的Session对象
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if (user == null) {
response.getWriter().print("您还没有登录,请<a href='/chapter05/login.html'>登录</a>");
} else {
response.getWriter().print("您已登录,欢迎你," + user.getUsername() + "!");
response.getWriter().print("<a href='/chapter05/LogoutServlet'>退出</a>");
// 创建Cookie存放Session的标识号
/*
* Cookie cookie = new Cookie("JSESSIONID", session.getId());
* cookie.setMaxAge(60 * 30); cookie.setPath("/chapter05");
* response.addCookie(cookie);
*/
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
先运行一下看下效果
可以看出浏览器获得了SessionID,那么上面的代码中哪一句,让响应对象添加了SessionID,最有可能的是HttpSession session = request.getSession(),我们debug进去看看:
我们再从这里进去看看
最后我们可以看到响应对象添加了响应消息头,消息头就有session ID,如下图