2011-09-30 43 views
6

我應該如何在會話上託管用戶的ID?只是爲了插入ID?我的意思是(例如):會話注入?

$_SESSION['id'] = 1; 

有沒有辦法改變它由用戶自己(作爲cookie ..)?因爲如果是這樣,他可以更改爲任何ID。

還有一個關於它的問題 - 我如何檢查用戶是否登錄(使用會話)?我創建了一個會話:

$_SESSION['is_logged_in'] = true; 

同樣,不能在用戶只需創建一個會話他的名字是「is_logged_in」和他的價值是真的嗎?或者只是服務器有一個關於服務器的價值的控制權?

+4

請參閱:[PHP會話修復/劫持](http://stackoverflow.com/questions/5081025/php-session-fixation-hijacking#5081453) –

+1

它應該工作的方式是由SESSION控制和創建僅限服務器。所以不,用戶不應該能夠*創建一個他的名字是'is_logged_in'*的會話,並且它會以你描述的方式影響會話,除非你的SESSION方法有嚴重缺陷。 –

+1

'$ _SESSION'中的值專門存儲在服務器端。用戶只收到一個包含其會話ID的PHPSESSID cookie。 PHP使用它在會話存儲中查找數據。 –

回答

12

PHP中的所有會話變量都存儲在服務器端。 客戶端存儲引用應該使用哪個會話的cookie,然後服務器查找會話的值。 在會話中存儲is_logged_in以及用戶標識是安全的。

你應該知道的是,如果另一個用戶獲得另一個用戶的會話cookie的持有者,他們將能夠模仿該用戶,直到會話超時。一個簡單的解決方案是將會話鏈接到IP。

+0

Check @Charles [answer](https://security.stackexchange.com/questions/14093/why-is-passing-the-session-id-as-url-parameter-insecure#14094)。 「將會話鎖定到IP地址可能會意外疏遠人們。」 – another