HTTP学习笔记——Session的原理和机制
HTTP学习笔记——Session的原理,机制
Session的原理,机制
什么是Session
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
Session的工作机制
- session是服务端存储的一个对象,主要用来存储所有访问过该服务端的客户端的用户信息(也可以存储其他信息),从而实现保持用户会话状态。但是服务器重启时,内存会被销毁,存储的用户信息也就消失了。
- 不同的用户访问服务端的时候会在session对象中存储键值对,“键”用来存储开启这个用户信息的“钥匙”,在登录成功后,“钥匙”通过cookie返回给客户端,客户端存储为sessionId记录在cookie中。当客户端再次访问时,会默认携带cookie中的sessionId来实现会话机制。
- session是基于cookie的。
- cookie的数据4k左右
- cookie存储数据的格式:字符串key=value
- cookie存储有效期:可以自行通过expires进行具体的日期设置,如果没设置,默认是关闭浏览器时失效。
- cookie有效范围:当前域名下有效。所以session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上(前后端项目协议、域名、端口号都一致,即在一个项目下)
- session持久化
用于解决重启服务器后session就消失的问题。在数据库中存储session,而不是存储在内存中。通过包:express-mysql-session - 其它
当客户端存储的cookie失效后,服务端的session不会立即销毁,会有一个延时,服务端会定期清理无效session,不会造成无效数据占用存储空间的问题。
Session的缺陷
-
开销大
由于服务器自身开辟了一块存储空间储存Session对象,当用户的请求量十分庞大时,储存庞大数量的Session对于服务器来说是一个巨大的开销。 -
限制服务器扩展能力
Session有一个致命的缺陷就是:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器上,上一台服务器的session就会丢失,从而严重限制了服务器的扩展能力。
结语
既然session对服务器高并发有所限制,那么那些电商平台是怎么解决这个问题的呢?答案就是token。下一篇博客——token的机制原理。