我目前正在學習PHP,並提出了一個關於Sessions的問題。在發佈這篇文章之前,我已經閱讀了一些關於這個主題的信息和主題,例如this one,但其中大部分都有點老了,所以我想確保我以正確的方式處理它們。PHP - 會話安全性和可靠性
所以,這裏是我的問題:假設下面的項目是真實的,
- 登錄時,我使用
session_regenerate_id()
再生PHP會話ID; - 登錄時,我創建與encripted代碼(即結合用戶的IP,瀏覽器,並在開始和結束一些隨機的東西),會話變量
$_SESSION['check'] = hash('ripemd128', $rand1 . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $rand2)
。
將該值發送到數據庫,並在每個頁面中檢查數據庫上的值是否與$_SESSION['check']
變量匹配;
- 我強制用戶通過
ini_set('session.use_only_cookies', 1)
啓用cookie,並且ini_set('session.use_trans_sid', 0)
也被設置; - ,退出時,我使用下面的代碼:
$_SESSION = array(); setcookie(session_name(), '', time()-259200, '/'); session_unset(); session_destroy();
這種方式,並假設投入會話變量的值是否正確驗證,我可以在我的會話變量相信100%?如果不是,我可以改進/改變什麼以使它們更安全?
我之所以問這個問題,是因爲當用戶登錄時,我將一些信息保存到會話變量中以避免用查詢重載數據庫,所以我需要確保它們不會被破壞。
謝謝。
你只是問你是否正確處理它們?如果是這樣的話,這可能更多地屬於[CodeReview](https://codereview.stackexchange.com/) – GrumpyCrouton
由於存儲和管理服務器端,會話變量通常可以被信任。然而,很多問題已經涵蓋了SO的相同主題,所以做一些研究。 – Devon
哈希不是「encripted」值。 – deceze