{eval=Array;=+count(Array);}
随着项目的发展,技术架构方案也是会慢慢演变的。比如说淘宝最早期是由单纯的PHP开发的站点,到现在单一架构模式已满足不了其发展需要,于是乎演变成了异构模式(即:多种技术的混合架构模式)。
现在市面上的开发语言众多,同一个产品线的多个子项目采用不同的编程语言开发也是很常见的。但对于不同语言开发的站点默认情况下Session是无法共用的,那么在异构模式下如何实现Session互通呢?下面给大家具体分析一下。
要想弄清楚不同语言间的Session互通问题,我们就要先了解Session的实现机制原理是什么。
大家都知道,HTTP协议本身是无状态的,客户端每次发出的请求在服务器端看来都是独立的,服务器端也无法得知哪些请求是同一个用户发出的。在这种机制下,有些需要状态保持的场景(如登录)就存在一些问题,于是就有了Cookie和Session。
举个例子来帮助大家理解一下:
因为HTTP协议无状态的特性,如果服务器端要辨识用户请求就需要给用户发一个“通行证”,拿到通行证的用户每次请求服务器时都会把这个通行证带上,这样一来服务器就知道拿着这个通行证的用户发出了哪些请求。那服务器是不是看到用户的“通行证”就直接放行呢?自然不是,对于某些操作,服务器端也要验证用户的“通行证”是否和服务器端存储的“用户档案”对得上。在这里,服务器端存储的用户档案就是Session,档案上的用户唯一编号就是SessionID,用户的唯一编号也会作为用户“通行证”的一部分发放给用户存储(存储在浏览器Cookie中)。
总结来说,Cookie是为了解决HTTP协议无状态的缺陷而推出的,而Session是一种在客户端和服务器端保持状态的解决方案。
在这种异构模式下要实现Session共用,那就需要保证各自的SessionID是共用的,所以我给的解决方案如下:
1、PHP与Node.js客户端要保证存储SessionID的Cookie Name一致,如果Cookie的名称不统一也没关系,但要保证对于同一个客户的SessionID要一致。
2、服务器端的Session要集中到一处管理,这样PHP和Node.js都能获取到Session。比如说可以把Session存储在数据库中或者Redis中。
3、如果给Cookie作了加密,那要保证PHP与Node.js两端的加解密规则一致。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
1
回答1
回答0
回答0
回答3
回答7
回答0
回答0
回答0
回答0
回答