Cookie:有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
Cookie原理:当客户端去访问使用了cookie的服务器时,服务器会生成一份cookie发送到客户端,客户端会把这个数据保存起来,然后这样下次使用时,服务器就可以通过cookie知道是哪个客户端了。

cookie.setMaxAge(0);此方法用来设置cookie时间
cookie1.setPath(req.getContextPath());设置访问路径
-浏览器访问这个路径,一定要带cookie才行
Cookie cookie1 = new Cookie("username",username);设置cookie对象存储账号
在web服务器中有一个session列表。类似于map集合。这个map集合的key存储的是session ID。
这个map集合的value存储的是对应的session对象
用户发送第一次请求的时候:服务器会创建一个新的session对象,同时给session对象生成一个id,然后web服务器会将session的id发送给浏览器,浏览器将session的id保存在浏览器的缓存中
用户发送第二次请求的时候:会自动将浏览器缓存中的sessionID 自动发送给服务器,服务器获取到session ID,然后从session列表中查找到对应的session对象
因为session是存放于服务器中的,这也是它和cookie的区别。
JSESSION=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的,浏览器只要关闭,这个cookie就没有了
1.为什么我们每次关闭了浏览器,会话就结束了?
2.session销毁的方式
session.invalidate()session.setMaxInactiveInterval()设置超时时间3.session实现原理:
HttpSession session = req.getSession();获取session,session是存在于一次会话中,我们可以将经常用的小信息,放入里面,例如登录的User信息,我们可以通过session,在每个页面都能拿到数据,而不必对服务器进行多次的请求。session.setAttribute("user",person);设置session域。//设置session销毁时间<session-config> <session-timeout>30</session-timeout></session-config>我们知道session是将信息存储到服务器里的,但是为什么我们每次关闭浏览器再打开,却拿不到存在浏览器里的数据呢,这就需要我们了解一下如何钝化与活化。
钝化:当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的这个目录下,这个过程叫做Session 的钝化。

活化:当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象,这个过程叫做Session的活化。
Serializable接口,同时也可以实现一个HttpSessionActivationListener监听Session行为的接口。public class Person implements Serializable, HttpSessionActivationListener { private static final long serialVersionUID = 1L; private String name; private Integer age; @Override public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("会话将被钝化,数据保存到硬盘"); } @Override public void sessionDidActivate(HttpSessionEvent se) { System.out.println("会话被活化,数据从硬盘中取出来了"); } public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}//用来存储session信息@WebServlet("/sessionTest")public class SessionTest extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); Person person = new Person(); person.setName("lx"); person.setAge(20); session.setAttribute("user",person); }}//用来拿到session信息@WebServlet("/sessionTest01")public class SessionTest01 extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); Person user =(Person) session.getAttribute("user"); System.out.println(user.getName()); System.out.println(user.getAge()); }}最后一步,配置文件:


