2013-01-08 134 views
3

當用戶登錄到站點時,我需要以某種方式存儲登錄的用戶ID,以便我的站點可以爲不同的用戶生成不同的內容。PHP:存儲登錄用戶

將用戶ID保存在$_SESSION[]變量中安全嗎?

用戶是否可以更改$_SESSION[]數據並僞裝成另一個用戶?

我使用id來檢查我應該從數據庫中獲取哪些數據並查看用戶擁有哪些權限。

+3

只有當其他用戶能夠獲取其他用戶的會話ID時纔有可能。因此,如果您打算將會話ID存儲在數據庫中,則應對其進行散列或加密。 – Kermit

+0

我會散列它,所以如果有人得到的信息,他們不能僞裝成另一個用戶(他們可以得到一個保存在SESSION,但很難將其更改爲另一個) – Skatox

+0

用戶不可能更改會話數據,它用戶可以劫持會話ID並假裝成與該會話相關聯的用戶 – Crisp

回答

4

最好的和被接受的做法是將用戶ID保存在會話中。

該會話默認作爲文件存儲在/tmp中。除非您有安全問題,例如directory traversal漏洞,否則最終用戶無法查看。大多數應用程序按照原樣使用$_SESSION。如果那裏存在大範圍的弱點,那麼重大項目會以不同的方式做事。您不必擔心通過客戶端漏洞獲取服務器端會話值。還要記住使用會話的簡單性。它使數據訪問您需要不斷訪問的,用戶特定的數據,在整個應用程序中保持標準和一致。

+0

所以一個簡單的方法來保存我想保存的數據是安全的,看起來很棒! :) –

+1

+1。 「$ _SESSION」系統的重點在於存儲這種數據。這是所有人都這樣做的方式,這是你應該做的。有一些注意事項需要注意(例如,如果託管公司對其安全性不在意,'/ tmp'可以被共享主機上的其他站點所有者訪問),但是通常'$ _SESSION'是安全可靠的作爲你可以想到的其他任何東西。如果你真的擔心它,可以使用像Suhosin這樣的擴展,在後臺加密會話數據(許多託管公司默認使用Suhosin)。 – SDC