Rails的Session默認(rèn)是存儲(chǔ)在Cookies中的,Cookies顯性存儲(chǔ)在瀏覽器中锦庸,因此基于安全性的考慮,對(duì)Cookies進(jìn)行加密是非常有必要的。
比如session的數(shù)據(jù){user_id: 100}绳慎,加密存儲(chǔ)在Cookies中可能就是這樣的形式:
BAh7BzoHaWRpBjoJbmFtZUkiC3cuZGVuZwY6BkVU--a547f29403e3d53174ddd88b7a3a64dfb8fdce6024d27105292fdbdf43c19f07
具體實(shí)現(xiàn)的方法是使用ActiveSupport::MessageVerifier這個(gè)類(lèi)。
http://api.rubyonrails.org/classes/ActiveSupport/MessageVerifier.html
@verifier = ActiveSupport::MessageVerifier.new('s3Krit', digest: 'SHA256')
# 加密
cookies[:remember_me] = @verifier.generate([@user.id, 2.weeks.from_now])
# 解密
id, time = @verifier.verify(cookies[:remember_me])
這里的s3Krit,是加密用的secret杏愤,一般會(huì)使用特別長(zhǎng)的隨機(jī)字符靡砌,Rails中會(huì)使用config/secrets.yml中的設(shè)置,加密后被破解的幾率就大大降低了珊楼。
為什么會(huì)研究這個(gè)通殃,因?yàn)榍昂蠖朔蛛x,打算在API調(diào)用的請(qǐng)求加上用戶(hù)登錄的驗(yàn)證厕宗,需要把用戶(hù)的session數(shù)據(jù)加密記錄在前端画舌,調(diào)用API的時(shí)候請(qǐng)求的header中加上此數(shù)據(jù)。