客户端|session正在被淘汰吗?

客户端|session正在被淘汰吗?

文章图片

客户端|session正在被淘汰吗?

首先你需要明白 session 的本质是什么 , 然后你就会发现 session 一直都在 。 虽然可能换了个名字 , 或者换了存储方式 , 但 session 的本质并没有改变 。 例如你说的将状态信息写出来 redis , 这就是换了个存储方式 , 目的是利用 redis 的共享性和速度 。
session 的实现方式有很多种 , redis 只是其中之一 。 除了像 JWT 这种将状态信息存储在客户端的“异类” , 其他将信息存于服务端并通过唯一 ID 寻址的都是 session 。

http 无状态 , 所以为了实现有状态 http , 才有了会话(session)的概念 。 说实话 , 网上很多关于会话的讨论都过于具体 , 会牵扯到不同的实现方案 , 容易让人误会 , 下文的“会话”都指的是广义的 web 会话 。
客户端保管方式
credential 由客户端保管 , 客户端怎么存放几乎不关服务器的事 , 浏览器 , 安卓 app , ios app , 桌面应用等都是客户端
浏览器一般把 credential 放在cookie里 , 就像把曲奇饼(cookie)放在小罐子里 , cookie 特殊的地方在于 , 浏览器会听服务器的话 , 比如服务器在设置cookie时指定了“http only” , 那浏览器就不会允许 js 拿到 , 至于其他的客户端 , 想放哪放哪 , 直接存文件或存本地数据库都行 , 或者还有其他骚操作都行 。
【客户端|session正在被淘汰吗?】
session的实质就是前端保存一个id , 后端根据这个id来识别会话 , 存取数据 。 仅此而已 , 至于这个id怎么保存 , 可以放在url后面 , 可以放在cookie里 , 甚至可以放在header里 。
在我看来 , 只要用到这种模式的都算session , 只不过这种id(专业点叫token)的实现方式不同 。 session的缺点就是数据保存在哪里的问题 , 既然要保存 , 分布式的时候肯定要保证session一致性 。
http.是无状态的 , 业务是有状态的 , cookie也好 , session也好 , 都是为了实现这个需求而创造的工具 , 无论技术怎么演进 , 万变不离其宗 , 还是会有个地方存储业务的状态 , 区别只是方式和实现的不同 , 本质并没有变 。
此基本流程之上 , cookie session https 存内存还是存redis还是存磁盘 , 存1天 , 1周 , 1月 , 自有协议 , 通用协议等等 , 并无本质区别 , 没谁死 , 都活得好好的

“大型网站”就没几个 , 一天1亿PV , qps160.25 , 乘5乘8随意也就1000qps峰值 , 存这些登录态7天活跃能有多大 , 百万级别至多了吧 , 一台4核16G的netty机器足够了 , 开swap都没啥大不了的 。。。, 不够?那是因为你缺台热备机 , 用到redis也就是因为切换主备用户最好没感知(对哦 , 我这可是叫做集群喔 , 毕竟2台机器+redis+小负载均衡网关) , 你要操心的所有问题可能都是mysql 。
狭义的session , 是基于http协议 , 通过浏览器cookie和服务端session对应来鉴权和保存用户状态 。 说到集群 , php原生支持部署session到redis , memcached , mysql等 。 只需要几行简单的配置即可 。