一、session会话
首先Session为:服务器端的会话技术,在同一次的会话中多次请求中访问的是同一数据,保证不同会话之间的独立性。在HTPP协议中Http请求是无状态的,只有在客户端连接时服务器才将客户端与之相应的session对应,那么通过什么对应客户端呢?也就是接下来所说的SessionID。
二、session会话的过程
- 客户端首次向服务器发起请求,服务器(Tomcat)会为该请求分配一个session对象并同时为该对象分配唯一一个JsessionID存入cookie中将其返回至客户端。
- 当客户端继续向服务器发起请求,服务器端将不再分配一个session对象,而是通过上次分配的JsessionID找到之前分配的session对象,同时上次对服务器操作的一些数据也会存在。
- 只有当客户端重新打开浏览器、session超时或者服务器重启时,再进行访问服务器才会分配新的session对象和JSESSIONID。
三、cookie和session
session会话的机制是基于cookie的,因为服务器并不会保存客户端的具体信息去确认是否为同一会话,只有通过客户端每次发起请求所携带的JSESSIONID确认对应的session。
两者之间是存在区别的:
- session是在服务器端保存客户端的信息,cookie是在客户端保存用户信息
- session保存的是任意对象,cookie保存的则是字符串
- 一般默认cookie的生命周期是与session的生命周期一样,但可以通过设置延长cookie的生命周期,进而达到长期存储在物理磁盘上或浏览器内存中
- cookie相对来说不安全,session相对来说安全
获取session对象的代码如下:
HttpSession session = req.getSession();
System.out.println("Test_Session的doGet被请求到了");
System.out.println(session.getId());
如图:服务器(Tomcat)为客户端分配的JSSEIONID
控制台获取的sessionID与和客户端获取的sessionID一致
Tomcat服务器分配的sessionID是JSESSIONID,不同的服务器所叫的名称不一样,但目的是一样的
四、总结
session会话的机制基于cookie中的sessionID,可以确保在同一次会话中多次请求获取到的数据是正确的。即在servlet生命周期中对象有三种存储域分别为:request、session、application.从而session确保了不同会话之间的数据是独立存在。