session:
1、背景和问题:
背景:
http 是一个无状态的协议,短连接(每次请求响应,都会新建连接,及关闭连接)
(http 1.1 提供了长连接)
问题:
2、解决方案:
登录操作:
(1)生成随机的字符串sessionid,保存在tomcat的用户信息数据结构中,session绑定一个用户,一个用户保存多个信息(通行证)
(2)把sessionid放在响应头,头信息的键值对,键是双方约定好的,值就是sessionid的值
(通行证的逻辑:实现方式很多种,相对来说,采取Cookie实现比较简单,tomcat采取cookie实现)
(3)客户端之后的请求,都携带session
(4)服务端接收请求,都验证sessionid(在map中根据通行证号,查询用户,来判断是否登录)
3、面试中回答:
- session是干嘛的?
会话,用来保持用户身份,主要解决需要登录的敏感资源访问的问题,工作在服务器内部 - 如何实现的?
通过服务器保存session信息 - 流程(登录操作)
- session在会话结束(超时,或注销),服务器重启就消失
cookie:
实现:
将用户信息保存在客户端本地(和浏览器相关的本地路径下,保存用户信息到本地文件)
域名绑定用户信息的Cookie,之后访问某个域名时,浏览器自动从本地抓取该域名的Cookie信息
面试回答:
- Cookie是保存在客户端本地文件,工作在客户端和服务器之间
- 使用场景: 多少天免登录
- 实现原理:登录成功,响应头Set-Cookie,之后每次都自动携带Cookie头
- Cookie 作用于Request上,Request Header中增加一个 Cookie 头
通过代码种 cookie:
//第一种:
resp.setHeader("Set-cookie","k1=v1");
//第二种:
Cookie cookie = new Cookie("k2","v2");
resp.addCookie(cookie);