2011-05-09 199 views
1

我有幾個關於會話和登錄/註銷系統的問題。PHP會議登錄系統問題!

在我的系統中,首先檢查用戶數據(用戶名和密碼)是否正確。如果是這樣,我正在註冊一個會話:$_SESSION['loggedin'] = 1然後我假設已經登錄,我總是檢查是否$_SESSION['loggedin'] 1或不。

但是,我最近觀察到,在其中一個用戶登錄後,讓他們轉到他們的頁面:/profile.php?u=newuser,但是當他們在他們自己的頁面中時,如果他們恰好將url更改爲:/ profile.php?u=newuser2我的系統假設newuser2現在已經被登錄了:(我怎樣才能解決這個問題?最好和最安全的登錄用戶的方式是什麼?

最後,會按照下面的方式工作嗎?假設我註冊了$_SESSION['username'] = $username;在這裏$ username data是從數據庫檢索,爲了理解一個用戶登錄或不,我總是從數據庫中檢索用戶名,並檢查$_SESSION['username'] == username。這是合乎邏輯的嗎?總是從數據庫獲取用戶名是否有效?

+0

你並不需要通過周圍的用戶名中的URL。只需在會話中將其存儲在登錄時,並檢查會話是否設置了用戶名,而不是1,則在會話中將該值用作用戶名(如果存在)。 – Orbling 2011-05-09 01:25:16

回答

3

由於會話數據存儲在服務器上,因此在$ _SESSION中存儲用戶名並按照您的說法檢查它是沒有問題的。

這會更好地存儲用戶ID,但說實話沒什麼大不了的。除非你允許用戶改變他們的用戶名。

profile.php不應該有決定編輯誰的$ _GET變量。它應該會自動使用登錄的人。即

,而不是去

$username = $_GET['u']; 

您應該使用

$username = $_SESSION['username']; 
+0

所以我要檢查$ _SESSION ['username'] == $ _GET ['u']?如果這是正確的,那麼用戶登錄,對吧? – makyol 2011-05-09 05:24:15

+0

不,你不應該使用$ _GET ['u']你應該去if(isset($ _SESSION ['username'])){echo'logged in!'; } – 2011-05-09 05:26:12

+0

問題是,當用戶登錄時,我確定$ _SESSION ['username']。如果該用戶轉到其他人的頁面,它仍然可以看到其他用戶的私人功能。如何在只檢查,isset($ _ SESSION ['用戶名'])時保護它? – makyol 2011-05-09 08:00:51