【node.js】学习篇:什么是cookie AND session;为什么要使用redis
cookie AND session
Session 和 Cookie 功能效果是差不多的,区别就是session 是记录在服务端的,Cookie是记录在客户端的。都是记录一系列状态的。
什么是cookie
网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。通俗来讲就是指缓存数据,包括用户名、密码、注册账户、手机号等公民个人信息。
什么是session
简单来说:
- session是服务端存储;
- session技术把用户的数据写到用户独占的session中;
- session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
理解session:当访问服务某个网页的时候,会在服务器端的内存开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个Session对应的浏览器访问,就算是在同一个机器上新启动的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启动一个属于自己的session。
为什么需要session:HTTP协议是非连接性的,取完当前浏览器的内容,然后关闭浏览器后,链接就断开了,而没有任何机制去记录取出后的信息。而当需要访问同一个网站的另外一个页面时(就好比如在第一个页面选择购买的商品后,跳转到第二个页面去进行付款)这个时候取出来的信息,就读不出来了。所以必须要有一种机制让页面知道之前页面的内容。
session的两种实现方式(也就是传递方式):第一种通过cookies实现。第二种通过URL重写来实现
使用cookie方式的理解:就是把session的id 放在cookie里面(为什么是使用cookies存放呢,因为cookie有临时的,也有定时的,临时的就是当前浏览器什么时候关掉即消失,也就是说session本来就是当浏览器关闭即消失的,所以可以用临时的cookie存放。保存再cookie里的sessionID一定不会重复,因为是独一无二的。),当允许浏览器使用cookie的时候,session就会依赖于cookies,当浏览器不支持cookie后,就可以通过第二种方式获取session内存中的数据资源。
session 为什么要存储在redis中?
1.操作系统会限制每个进程使用的内存大小(32位是0.7G、64位是1.4G),如果我们将session 存在node.js的进程内存中,由于node的运行也是需要内存的,访问量一旦上来,内存很快就吃不消了,无法保证系统可靠性。
2.在线上,我们需要为node开启多线程,来提升性能,如果此时我们在多个进程中都存储了session数据,由于进程中数据不互通(进程数据隔离),可能导致用户命中不同进程,从而导致数据紊乱!
为什么session 适合使用 redis 存储?
- session 访频繁,对性能要求极高!
- session 可以不考虑断电丢失数据的问题!丢失了再获取就好了!
- Session 数据量不会很大(相较于mysql中存储的数据)
为什么网站数据不适合用redis?
- 操作频率不太高;
- 断电不能丢失,数据必须保留;
- 数据量太大!内存量不足!
解决方案:
将web server 和 redis 拆分为两个独立的服务;双方都是可拓展的(例如扩展成集群);并且方便日常维护!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?