2013-03-24 67 views
0

請給我建議,如果我的想法是正確的。我搜索了信息,但沒有找到確切的答案。

用戶輸入用戶名和密碼與所輸入的用戶名/密碼是相同的,如MySQL的。

創建$ _SESSION [ '的loggedIn'] = 1;這意味着在服務器上的某個地方創建文件的隨機名稱,如r21bj2a3 ....並在用戶瀏覽器中創建cookie的值如r21bj2a3 ....

在下一頁我檢查是否($ _SESSION ['loggedin' ] == 1)。用戶瀏覽器連接到服務器,發送到服務器信息,如:我有Cookie的價值r21bj2a3 ....,請給我的內容?會議?服務器發送信息,對於特定的Cookie會話的loggedIn爲1

按我的理解,如果惡意用戶獲取cookie值r21bj2a3 ....,發送到服務器,並得到了同樣的答案是普通用戶?

根據$ _SESSION [ '的loggedIn']我不能識別特定的用戶?爲了在成功登錄後識別特定用戶,我可以創建唯一的令牌,在mysql中記錄並通過會話?並在通過會話的密碼保護的頁面上,我得到令牌值並檢查(選擇)如果這樣的值存在於mysql中。這樣好嗎?可能會發布一些好的方法鏈接?

關於標記。我使用會話傳遞令牌值。這意味着如果惡意用戶獲取cookie值,發送到服務器並獲得答案,包含令牌值(這樣惡意用戶獲得正常用戶的權限)?

回答

0
登錄

我建議將所有活動會話保存在數據庫中,可以創建一個表來實現這一點,爲了防止會話劫持,可以檢查每個特定會話(登錄)並查看用戶是否已經過身份驗證,然後不允許進行第二次身份驗證。

這裏的問題,如何識別用戶? 您可以綁定一些信息,如USER_AGENT和IP地址,但是這些信息也可能被黑客欺騙,但概率較小。

而且,一旦用戶退出,你可以刪除數據庫中的會話記錄。

+0

請問,你能給一些鏈接更多的信息?現在我看到:訪問者打開密碼保護頁面。我檢查是否isset($ _ SESSION ['userid']。如果isset,然後有會話值(id)。檢查是否在mysql表會話這樣的值(ID)存在,並檢查是否有人已經認證的值(ID)。如果已經通過身份驗證不允許進行第二次身份驗證,那麼目前爲止都可以,但是我怎麼知道哪個是真實用戶?哪個惡意訪問者?兩者都會給出相同的會話值......例如,這兩個訪問者都會打開新頁面並給出會話值 – user2188210 2013-03-24 08:24:45

+0

正如我所說,保存IP,USER_AGENT以及會話ID,請參閱[$ _SERVER](http://php.net/manual/en/reserved.variables.server.php) – 2013-03-24 08:26:01

+0

啊,是的,謝謝。明白這不是100%?惡意用戶可以獲得相同的IP等,真正的用戶在會話期間可能會改變IP等。據我所知,需要儘可能使用標識符(幾乎)在會話期間永遠不會改變? – user2188210 2013-03-24 08:34:16

0

要確定會話屬於哪個用戶,只需設置一個可行的會話

$_SESSION['user'] = user 

您將會話cookie的訪問給予正確。如果安全性很重要,請使用SsL。

+0

=用戶必須是例如與mysql中相同的用戶名?用戶名不變。因此,在每次登錄時創建隨機值並在每次登錄時更改值可能會更好?或者它是無用的? – user2188210 2013-03-24 07:28:14

+0

@ user2188210 - 如果用戶和服務器之間存在[代理](http://en.wikipedia.org/wiki/Proxy_server),您將始終可能不安全,除非您有https連接。 – Aiias 2013-03-24 07:29:41

+0

你說那個loggedkn不識別用戶。我建議你只保存會話中的用戶。 – SteveP 2013-03-24 07:30:07

0

HTTP是無狀態的protocol.It不跟蹤數據的跨多個pages.So我們需要會話可以是橫跨在網站

所有頁面識別用戶誰是當前登錄到網站上,我們需要全局訪問將用戶表中user_id字段的值存儲到會話中,通過認證成功。

例如

$_SESSION['user_id']=$result['user_id'] 

,並確定用戶是否登錄或不,我們可以檢查$ _SESSION值[「user_ID的」]變量。如果是空的,則用戶不會在其他用戶登錄