PHP與NodeJS如何共用Session?
隨著項目的發展,技術架構方案也是會慢慢演變的。比如說淘寶最早期是由單純的PHP開發的站點,到現在單一架構模式已滿足不了其發展需要,于是乎演變成了異構模式(即:多種技術的混合架構模式)。
現在市面上的開發語言眾多,同一個產品線的多個子項目采用不同的編程語言開發也是很常見的。但對于不同語言開發的站點默認情況下Session是無法共用的,那么在異構模式下如何實現Session互通呢?下面給大家具體分析一下。
Session運行原理要想弄清楚不同語言間的Session互通問題,我們就要先了解Session的實現機制原理是什么。
大家都知道,HTTP協議本身是無狀態的,客戶端每次發出的請求在服務器端看來都是獨立的,服務器端也無法得知哪些請求是同一個用戶發出的。在這種機制下,有些需要狀態保持的場景(如登錄)就存在一些問題,于是就有了Cookie和Session。
舉個例子來幫助大家理解一下:
因為HTTP協議無狀態的特性,如果服務器端要辨識用戶請求就需要給用戶發一個“通行證”,拿到通行證的用戶每次請求服務器時都會把這個通行證帶上,這樣一來服務器就知道拿著這個通行證的用戶發出了哪些請求。那服務器是不是看到用戶的“通行證”就直接放行呢?自然不是,對于某些操作,服務器端也要驗證用戶的“通行證”是否和服務器端存儲的“用戶檔案”對得上。在這里,服務器端存儲的用戶檔案就是Session,檔案上的用戶唯一編號就是SessionID,用戶的唯一編號也會作為用戶“通行證”的一部分發放給用戶存儲(存儲在瀏覽器Cookie中)。
總結來說,Cookie是為了解決HTTP協議無狀態的缺陷而推出的,而Session是一種在客戶端和服務器端保持狀態的解決方案。
PHP與Node.js如何實現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兩端的加解密規則一致。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!