OpenResty和Tomcat分工不同,像這種異構模式,如果要共用Session會話,用傳統的Cookie模式實現成本是很大的。
那對於這種異構或者叢集分散式環境、又或者是不同域名間的Session共享該如何實現呢?要弄清楚這個問題,我們得先清楚Session的工作原理。
Session儲存於伺服器端,儲存方式一般是記憶體、檔案形式。伺服器端可以存放很多Session,在眾多的Session中如果需要對特定使用者的Session進行操作,我們就必須要知道這個Session的唯一標識。這個標識就是SessionID,不同伺服器/容器生成SessionID的演算法不同,啟用Session後,瀏覽器發出請求,SessionID就被寫入使用者瀏覽器的Cookie中,瀏覽器後續請求都會把Cookie附加在請求頭中傳遞到伺服器端,伺服器端根據這個SessionID就能找到伺服器端對應的Session進行操作了。
這樣一來,只要我們能讓SessionID實現共享,那Session就能共用了,所以我們可以採用以下方案來實現:
1、Session入庫儲存
將Session存入資料庫,這樣不管是OpenResty還是Tomcat都可以操作資料庫,能輕鬆取出資料庫中的Session。
2、Session存入NoSQL
此種方案和Session入庫差不多,原理都一樣,只不過我們用NoSQL(如:Redis),這樣乾的目的就是降低頻繁操作資料庫造成的效能開銷。
綜上,OpenResty中我們可以直接操作Redis,然後應用程式端也來操作Redis即可,這樣可以實現Session共享。
OpenResty和Tomcat分工不同,像這種異構模式,如果要共用Session會話,用傳統的Cookie模式實現成本是很大的。
那對於這種異構或者叢集分散式環境、又或者是不同域名間的Session共享該如何實現呢?要弄清楚這個問題,我們得先清楚Session的工作原理。
Session儲存於伺服器端,儲存方式一般是記憶體、檔案形式。伺服器端可以存放很多Session,在眾多的Session中如果需要對特定使用者的Session進行操作,我們就必須要知道這個Session的唯一標識。這個標識就是SessionID,不同伺服器/容器生成SessionID的演算法不同,啟用Session後,瀏覽器發出請求,SessionID就被寫入使用者瀏覽器的Cookie中,瀏覽器後續請求都會把Cookie附加在請求頭中傳遞到伺服器端,伺服器端根據這個SessionID就能找到伺服器端對應的Session進行操作了。
這樣一來,只要我們能讓SessionID實現共享,那Session就能共用了,所以我們可以採用以下方案來實現:
1、Session入庫儲存
將Session存入資料庫,這樣不管是OpenResty還是Tomcat都可以操作資料庫,能輕鬆取出資料庫中的Session。
2、Session存入NoSQL
此種方案和Session入庫差不多,原理都一樣,只不過我們用NoSQL(如:Redis),這樣乾的目的就是降低頻繁操作資料庫造成的效能開銷。
綜上,OpenResty中我們可以直接操作Redis,然後應用程式端也來操作Redis即可,這樣可以實現Session共享。