前后端 Session
Session,即会话,它是存储在服务端的 “一轮会话” 的信息。
一、什么是 Session ?
1. 抽象的 Session
Session 本身是一个抽象概念。
客户端与服务器之间一对一的交互被称为会话,进而衍生出会话状态,这便是 Session 的抽象概念。
2. 具体的 Session
可以这么理解具体的 Session:
服务器划分了一块块存储空间,它们可以用于存储信息,分别对应一个客户端和一个服务器之间的会话状态。
二、工作流程
- 后端接收请求,获取请求中附带的 session_id
- 如果请求中附带了 session_id
- 当根据 session_id 可以找到对应 Session 时,正常处理请求
- 当根据 session_id 无法找到对应 Session 时,创建新的 Session
- 如果请求中不附带 session_id,创建新的 Session
- 如果请求中附带了 session_id
- 使用 Session 访问和保存会话中的信息
三、特点
- 数据保存在服务器端
- 可以在一次会话的多次请求间共享数据
- 可以存储任意类型,任意大小的数据
四、session_id 的携带方式
1. Cookie
第一次获取 Session 后,通过响应头中的 set-cookie 让客户端存储 JSESSIONID 这一 Cookie
1
set-cookie: JSESSIONID = sessionID值
浏览器接收该请求响应后会将 Cookie 存储在浏览器之中
此后,客户端每次向服务器发送请求时,会将 JSESSIONID 附带在 Cookie 中
2. 隐藏的表单字段
可以在表单中增加一个隐藏的 input:
1 |
|
它将会随着表单提交被附带在 GET 或 POST 之中,发送至服务器,服务器根据该值寻找对应 Session 。
3. URL 重写
可以在 URL 末尾追加额外数据用于标识 session,服务器根据该值寻找对应 Session 。
例如,http://w3cschool.cc/file.htm;sessionid=12345,session 会话标识符被附加为 sessionid=12345,标识符可被 Web 服务器访问以识别客户端。
1 |
|
URL 重写法在浏览器不支持 Cookie 时也能够很好的标识每一个 Session
五、Session 和 Cookie
Session 存储在服务器端
Cookie 存储在客户端
Session 没有数据大小限制
Cookie 有数据大小限制
Session 没有数据类型限制
Cookie 只能存储字符串
Session 数据存储在服务器端,相对安全
Cookie 数据存储在客户端,相对不安全