跨域那些事(2)
上一篇文章有些細節沒有講明白.
比如我說redis做存儲化比較安全,那爲何我不用redis去存用戶登錄名呢,雖然cookie中存當前登錄名被改不會有什麼影響,但是這裏涉及到一些redis的使用.
redis是一種key-value映射的高效存儲方式,從內存中讀取數據,速度非常quick.如果我能確定key的唯一性,我自然可以使用redis的set key value.但是當前用戶名存儲,我們該用什麼樣的key呢.current_username?如果用這個,所有人都使用這個key,大家會根據登錄先後順序去覆蓋current_username對應的鍵值.這樣根本就達不到我們的要求.
同樣的token也是一樣,如果單純地用auth_token作爲鍵名,只要有人登錄過,其他人都可以從redis裏面讀取到,也就失去了auth的效果.
這就是爲什麼多個系統之間要做單點登錄的原因,甚至單獨做個系統來做單點登錄的接入口.
In a word,事情並沒有我們想的那麼簡單.我仔細思考後決定利用key的唯一確定,去規避共享redis data的弊端.
username還是交給cookie去弄,在token的寫入的時候,用username+key的方式,如下:
$this->MyRedis->set($user_name . '_auth_token', 'xxsdrewercdscerrtc', 3000);
跨域之後讀取的時候:
$auth_token = $this->MyRedis->get($_COOKIE['login_name'] . '_auth_token');
loginout的時候redis在del這個key,保持唯一性.
總結:使用任何技術一定要考慮周全,盲目使用任何都是沒有什麼卵用.