{eval=Array;=+count(Array);}
隨著項目的發(fā)展,技術架構(gòu)方案也是會慢慢演變的。比如說淘寶最早期是由單純的PHP開發(fā)的站點,到現(xiàn)在單一架構(gòu)模式已滿足不了其發(fā)展需要,于是乎演變成了異構(gòu)模式(即:多種技術的混合架構(gòu)模式)。
現(xiàn)在市面上的開發(fā)語言眾多,同一個產(chǎn)品線的多個子項目采用不同的編程語言開發(fā)也是很常見的。但對于不同語言開發(fā)的站點默認情況下Session是無法共用的,那么在異構(gòu)模式下如何實現(xiàn)Session互通呢?下面給大家具體分析一下。
要想弄清楚不同語言間的Session互通問題,我們就要先了解Session的實現(xiàn)機制原理是什么。
大家都知道,HTTP協(xié)議本身是無狀態(tài)的,客戶端每次發(fā)出的請求在服務器端看來都是獨立的,服務器端也無法得知哪些請求是同一個用戶發(fā)出的。在這種機制下,有些需要狀態(tài)保持的場景(如登錄)就存在一些問題,于是就有了Cookie和Session。
舉個例子來幫助大家理解一下:
因為HTTP協(xié)議無狀態(tài)的特性,如果服務器端要辨識用戶請求就需要給用戶發(fā)一個“通行證”,拿到通行證的用戶每次請求服務器時都會把這個通行證帶上,這樣一來服務器就知道拿著這個通行證的用戶發(fā)出了哪些請求。那服務器是不是看到用戶的“通行證”就直接放行呢?自然不是,對于某些操作,服務器端也要驗證用戶的“通行證”是否和服務器端存儲的“用戶檔案”對得上。在這里,服務器端存儲的用戶檔案就是Session,檔案上的用戶唯一編號就是SessionID,用戶的唯一編號也會作為用戶“通行證”的一部分發(fā)放給用戶存儲(存儲在瀏覽器Cookie中)。
總結(jié)來說,Cookie是為了解決HTTP協(xié)議無狀態(tài)的缺陷而推出的,而Session是一種在客戶端和服務器端保持狀態(tài)的解決方案。
在這種異構(gòu)模式下要實現(xiàn)Session共用,那就需要保證各自的SessionID是共用的,所以我給的解決方案如下:
1、PHP與Node.js客戶端要保證存儲SessionID的Cookie Name一致,如果Cookie的名稱不統(tǒng)一也沒關系,但要保證對于同一個客戶的SessionID要一致。
2、服務器端的Session要集中到一處管理,這樣PHP和Node.js都能獲取到Session。比如說可以把Session存儲在數(shù)據(jù)庫中或者Redis中。
3、如果給Cookie作了加密,那要保證PHP與Node.js兩端的加解密規(guī)則一致。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區(qū)交流 ~ 我是科技領域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗,歡迎關注我了解更多科技知識!
1
回答1
回答0
回答0
回答3
回答7
回答0
回答0
回答0
回答0
回答