首頁>Club>
11
回覆列表
  • 1 # 網路圈

    隨著專案的發展,技術架構方案也是會慢慢演變的。比如說淘寶最早期是由單純的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兩端的加解密規則一致。

  • 中秋節和大豐收的關聯?
  • 做潤滑油業務怎麼樣,有前途嗎?