HTTP是一种“无状态”(stateless)的协议
- 每次客户端访问网页时,客户端都会打开与web服务器的单独连接
- 并且服务器不会自动保留之前客户端请求的任何记录
- 所以服务器无法识别多个请求是否来自同一个客户端(比如浏览器)
在很多应用场景中,都有以下需求
- 服务器能够识别出多个请求是否来自同一个客户端
- 在来自同一个客户端的多个请求之间共享数据
以上需求可以使用会话跟踪技术来完成。在Java中, 实现会话跟踪的常用方案是
- Cookie
- Session
Cookie
有效期
作用域
-
domain 只包含主机,不包含端口。例如设定domin=10.86.35.36,那么对 10.86.35.36:8088,10.86.35.36:8089都有效。
-
js中path默认
/,java中cookie默认path是/context_path.domain默认是当前主机不包括端口。 -
存储在客户端的cookie,有些时候会主动发送给服务器。
服务器设置Cookie
Cookie cookie = new Cookie("name", "mj");
response.addCookie(cookie);
Session
session底层是用的cookie技术。
服务器
request.getSession();
getSession()内部原理
Session的有效期
session默认30分钟未使用,自动销毁。这里指未使用;
服务器停止了,session还会存在吗? 看是什么容器,如果是Tomcat的话。Tomcat停止的时候会把session持久化入磁盘,重启的时候会重新读取。这时候session的内存地址变了,但是id不变。依然可以取到停止之前的session对象。但是使用IDEA的时候,会将磁盘的session文件删除。所以使用IDEA时,服务器停止了,session会丢失。
总结: