2013-06-29 155 views
3

我正在使用PHP $ _SESSION變量與我的網站的登錄工作流程,我只是想作些澄清。就像Facebook一樣,我想存儲一個只有服務器已知的密碼,用於簽署發送到服務器和從服務器發送的每個請求。我最初的方法是生成一個隨機字符串並將其存儲在MySQL表中,但後來我瞭解了會話變量。我知道會話變量默認使用cookie來存儲會話名稱和ID,是否正確?沒有實際的數據存儲在用戶的計算機上?所以,如果我想要實現:

 

# assume that $rand_string is not null and a string 
session_start(); 
$_SESSION['secret'] = $rand_string; 
 

不會有任何的方式爲用戶解碼會話cookie並確定$rand_string的實際價值,對不對?只是想確保數據是安全的,否則我會回到不那麼流暢的MySQL技術。我只是想到易於訪問和管理的會話變量。

回答

7

會話數據存儲在服務器端。

Cookie數據存儲在客戶端。

+0

那麼會話cookie究竟存儲了什麼? –

+7

會話cookie將會話ID存儲在客戶端,因此在隨後的請求中,瀏覽器可以告訴服務器使用哪個會話。 – DevZer0

+0

真棒謝謝! –

1

是的,你是對的,用戶只知道會話ID或類似的東西,只是用來標識用戶對應的會話。

其餘數據暫時存儲在服務器上。

訪問者沒有辦法讓會話數據得到處理,除非您的網站上有重大錯誤,我認爲您沒有這樣做。

+0

太棒了!感謝您的澄清! –

2

我寧願通過生成guid`功能做隨機的東西,因爲它會生成一個唯一的標識符,並且會比簡單隨機更安全:

# assume that $rand_string is not null and a string 
session_start(); 
$_SESSION['secret'] = com_create_guid(); 

是的,$ _SESSION變量存儲在服務器端。

+0

每次該腳本執行時,uid都會改變嗎? –

+0

是的,每次你打電話給它。會生成一個新的uid,但您可以在第一次將其創建時(每個用戶)存儲在$ _SESSION var中。 – Skatox

+0

抱歉繼續提問!那麼,即使對同一臺計算機多次創建一個新的guid? –

1

你說的是對的。 $_SESSION中的所有數據只能在服務器上訪問,但只有會話沒有超時。

儘管如此,您應該小心存儲在cookie中的會話ID很容易被捕獲。詳情請參閱Sessions and Security