跨域那些事(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,保持唯一性.

 

總結:使用任何技術一定要考慮周全,盲目使用任何都是沒有什麼卵用.

posted @ 2015-07-18 17:00  freephp  阅读(174)  评论(1编辑  收藏  举报