最近做的乙個專案中,操作的時候需要對手機號進行簡訊驗證。
對簡訊驗證的步驟:
一、獲取驗證碼,把獲取得到的驗證碼儲存到該使用者的session中
二、然後把該驗證碼以簡訊的方式傳送到手機上。
三、使用者在進行操作的時候,所要提交的表單中需要包含,要操作的資訊和輸入的驗證碼。
後台會把使用者輸入的驗證碼與session中的驗證碼進行對比,如果驗證通過,則可以進行後續的操作。
在這個流程中,驗證碼存到session中,之後驗證碼的校驗 是這個流程的關鍵。
我所做的專案是乙個分布式的專案,所以存在session共享的問題。即傳送簡訊的功能與要操作的功能沒在同乙個模組中。這樣的話,如果session儲存到傳送簡訊模組的session中之後,後續操作的模組中並不能獲取到session中的資訊。
為了解決以上遇到的問題,需要處理的問題是,session如何在分布式環境上共享。
網上提供了三種常用的分布式環境,管理session的方案:
將一台機器上的session資料以廣播的形式發布到其餘機器上
指的是如果機器a有使用者a的session資訊,那麼使用者a在訪問的時候,仍被分配到機器a上,(如上的例子,則需要單獨去簡訊模組中進行驗證)
這種方式,是建立乙個單獨的伺服器,共同處理集群中的session資訊。
權衡一下這幾種方案,第一種方案中 每台機器上都存有大量的session資訊,對網路的依賴較大。第二種方案中,session資訊只存在指定的某台機器上,如果某台機器down掉之後,會有使用者資訊的丟失。
結合上面的幾種優缺點。決定還是使用第三種方案,如果為了考慮可用性,可以建立多個伺服器管理session。
最終採用的解決方案,使用者獲取驗證碼之後,把驗證碼儲存到redis裡面。然後使用者在操作之後,把輸入的驗證碼與存到session中的驗證碼對比,如果驗證碼正確則可以繼續操作。
session分布式處理
在支援session複製的web伺服器上,通過修改web伺服器的配置,可以實現將session同步到其他web伺服器上,達到每個web伺服器上都儲存一致的session。1.優點 上不需要做支援和修改。2.缺點 需要依賴支援的web伺服器,一旦更換成不支援的web伺服器就不能使用了,在資料量很大的情...
分布式系統session處理
分布式系統中同乙個使用者的請求可能會被分發到不同的伺服器上,而session是儲存在單個伺服器上,所以有可能會導致session失效,對於前端使用者最明顯的感覺就是需要重新登入。主要有如下幾種解決方案 1.session sticky 方式 由負載均衡來負責標記每次的請求,將同乙個會話請求傳送到同乙...
分布式環境下的session共享
session共享在當前這個網際網路背景下,已經不是乙個新鮮的話題了,而且如何解決session共享其實也有很多非常成熟的方案 伺服器實現的session複製或session共享,這型別的共享session是和伺服器緊密相關的 我們在web伺服器之間增加了會話資料的同步,通過同步就保證了不同web伺...