Session和Cookie

session 工作机制
  当第一次调用getSession( )就创建了 session 对象, 并且会为该对象分配一个id,
  将这个 id 保存到session 对象中, 再赋值一个副本以 cookie 的方式保存到浏览器.
  再次调用 getSession( ) 方法的时候会将客户端传递的 cookie 进行遍历判断,
  如果有 JESSIONID 并且能和服务器端的 id 匹配 则不再生成新的内置对象, 直接返回该对象.
  如果直接访问一个 servlet. 在servlet 中不调用 getSession( )方法不会生成 session 内置对象的

注意:
访问 jsp 页面的时候会产生 session 对象 , 因为 jsp 是一个特殊的 Servlet,
而且在这个特殊的 Servlet 中默认调用了 getSession( ) 方法.
当访问 jsp 页面的时候回家过 jsp 转换成一个*.java原码文件, 之后再将该类转换为*.class 文件,
转换后的*.class文件就是一个特殊的 servlet, 而且在该servlet 中调用 getSession( )方法.

ex:

 1 @SuppressWarnings("serial")
 2 public class EmpServlet extends HttpServlet {
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         //调用了 getSession() 方法
 6         req.getSession();
 7         Cookie[] cs = req.getCookies();
 8         if (cs != null) {
 9             for (Cookie c : cs) {
10                 System.out.println(c.getName() + ":" + c.getValue());
11             }
12         }
13     }
14 }
原文地址:https://www.cnblogs.com/yslf/p/10745577.html