2013-03-15 68 views
-1

我知道Session用於跟蹤客戶端的操作,或者簡單地就像登錄,如果有會話,顯示內容,如果不是,那麼他是Guest,我們將存儲爲以及本次會議中的價值觀或屬性。應該在會話中存儲哪些屬性

到現在爲止,我總是將用戶ID存儲在會話中,作爲一個主要屬性,可以幫助我在其他頁面中識別他。

$_SESSION['userID'] = $userID; //example: 100, 101, 102...

我可以檢索這個ID,並根據該ID從數據庫中獲取數據。

$userID = $_SESSION['userID']; 
$query = "SELECT * FROM posts WHERE user_id = ".$userID; 

這是使用Session的正確方法嗎?該ID不應該存儲在會話中?任何安全風險?如果不應該存儲,那麼我如何識別用戶?

+0

只在會話中存儲'userID'很好。當您開始在會話中存儲密碼和其他敏感信息時會出現問題。 'userID'本身不是敏感信息。 – 2013-03-15 13:48:21

+0

也許你可以使用唯一的'訪問令牌'的東西,這隻會對註冊和登錄用戶有效。如果您發現有效的訪問令牌,請獲取ID和內容。這樣,即使訪問令牌被劫持,人們可能也無法猜測它產生的方式。 – SachinGutte 2013-03-15 13:49:06

+0

只有userId,您無法授權任何人。它只是猜測任何ID,如果你打一個,你登錄... – 2013-03-15 13:49:57

回答

1

是的,將用戶ID存儲在會話中就好,只是不要用它來認證用戶,而是使用認證ID。

除此之外,不應該有安全風險。

只是不要使用它們來存儲敏感信息(密碼和類似的)。

+0

所以我應該爲每個用戶有2個ID?用於驗證的增量ID,例如'100,101,102'和用於顯示的生成ID'user.php?id = Sjd8923nqwe'? – 2013-03-16 09:56:12

+0

沒有必要這樣做,如果該ID不是保密的(很可能不是),那麼你可以向他們展示他的身份證,沒有必要隱藏它。只要不將它們用於存儲在客戶端Cookie中的純文本中的客戶端標識,原因是允許用戶僅更改標識併成爲另一個客戶端而沒有他們的信用卡。 – LordShigi 2013-03-16 10:44:03

0

會話永遠不會轉移給用戶。瀏覽器得到一個名爲PHPSESSID的cookie,其中包含會話的ID。

這意味着:無論您在會話中存儲什麼內容,它都完全保留在服務器上。

從這個角度來看,會話中的數據沒有安全問題。你可以在那裏存儲你喜歡的東西。

0

在會話範圍內儘可能少地存儲信息。

原因是,在現代瀏覽器中,相同的會話在相同瀏覽器實例中的標籤之間共享,或者在單獨的瀏覽器實例中共享。換句話說,如果你在firefox中打開你的應用程序,例如,然後再次啓動firefox,新的firefox窗口會繼承舊的會話。

現在是壞的一部分。如果在瀏覽器1中有session.abc = 123,然後在瀏覽器2中執行某些操作將其更改爲456,然後返回到瀏覽器1併發出某種類型的頁面請求(如提交表單)將根據該請求使用session.abc的新值。

我們被這個燒了。人們無意中更新了錯誤的記錄。

相關問題