一文讀懂Session共享
在?一文讀懂Cookie與Session?中我們介紹了Cookie與Session,這篇文章將繼續(xù)這個(gè)話題,講述Cookie與Session的實(shí)際應(yīng)用場景。
基于Cookie與Session的登錄認(rèn)證

這是上一篇文章的登錄模型,它在單機(jī)系統(tǒng)中,表現(xiàn)的很好很強(qiáng)大。但是在分布式系統(tǒng)中卻不適用,如下圖,有3臺(tái)Tomcat,你在tomcat1登錄了一次,但是你去tomcat2去訪問的時(shí)候,因?yàn)閟ession只存在tomcat1中,所以你又得去登錄一遍,累死。

那么有沒有好的解決方案呢,有的,那就是Session共享
Session共享
1.session復(fù)制
比較經(jīng)典的就是tomcat集群的session復(fù)制機(jī)制。用戶瀏覽器訪問后,負(fù)載均衡器定位到了Tomcat1,如果發(fā)現(xiàn)Tomcat1沒有session,就會(huì)創(chuàng)建一個(gè)session,作為主備份(primary copy)。同時(shí)廣播給其他Tomcat服務(wù)器,讓它們生成tomcat1的session的拷貝(backup copy)。
第二次用戶瀏覽器訪問,如果Tomcat1掛了,負(fù)載均衡器分配到比如Tomcat2上,就會(huì)有以下兩種情況:
1.Tomcat2沒有session拷貝,它會(huì)向其他Tomcat機(jī)器詢問是否有session拷貝,有的話,借給她一份。Tomcat2借到session拷貝后,作為主備份,然后再廣播給其他的機(jī)器。
2.Tomcat2有session拷貝,升級(jí)為主拷貝,然后廣播給其他機(jī)器

2.Session集中存儲(chǔ)
這種情況下,就是完全把Session托管給外部環(huán)境,比如redis緩存,數(shù)據(jù)庫等,來進(jìn)行統(tǒng)一存儲(chǔ)。所有的服務(wù)器統(tǒng)一從一個(gè)地方讀取。
