當用戶登錄時,我得到他/她的ID並將其保存在會話變量中。我想知道的是,這是要走的路嗎?或者我應該使用cookie?所以它會自動登錄等等。Cookies /會話登錄系統
session_start();
ifcorrectlogin {
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id');
}
您如何驗證您的用戶?
//新手
當用戶登錄時,我得到他/她的ID並將其保存在會話變量中。我想知道的是,這是要走的路嗎?或者我應該使用cookie?所以它會自動登錄等等。Cookies /會話登錄系統
session_start();
ifcorrectlogin {
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id');
}
您如何驗證您的用戶?
//新手
我會試着找到一個會話引擎,所以你不必處理misc。安全問題,如果你犯了一些錯誤,那就咬你的屁股。我使用的是內置會話引擎的django。我並不知道該領域的其他產品,儘管我認爲大多數框架都有。
他們在django做的方式是在用戶的Cookie中放置一個加密哈希,每次頁面查看都會更新,並將所有其他會話信息保存在服務器上的數據庫中,以防止用戶篡改和安全問題。
是的,這是要走的路。該會議本身已經由一個cookie支持,以消除您的任何編程工作。只要用戶打開瀏覽器實例或者直到會話在服務器端超時,會話(實際上是cookie)就會存在,因爲用戶在某段時間(通常大約30分鐘)內未訪問該網站。
登錄時,只需將獲得的User
置於$_SESSION
。在受限制頁面上的每個請求上,您只需檢查登錄的User
是否在$_SESSION
中可用,並相應地處理請求,即繼續處理請求或重定向到登錄或錯誤頁面。在註銷時,請從$_SESSION
中刪除User
。
如果你想添加一個在這臺電腦上記住我選項,那麼你需要自己添加另一個cookie,它的壽命比會話長。您只需確保爲cookie生成一個長期,唯一且難以猜測的值,否則它很容易被破解。看看PHP如何通過在網頁瀏覽器中使用名稱phpsessionid
來檢查cookie。
所以如果我明白如果用戶想要被「記住」正確,我應該存儲一個獨特的字符串在一個cookie和分貝,當用戶再次訪問我檢查如果存在的cookie,如果它確實存在我比較它與一個在db? – Erkka 2009-12-26 00:26:34
差不多。當一個**未登錄的用戶訪問時,然後檢查DB關聯的用戶,然後「自動」登錄。我發佈了一個答案,其中涵蓋了這一點,你可能會覺得它有用以及:http://stackoverflow.com/questions/1877242/keep-user-logged-in-when-he-visit-the-same-page-again/1877304#1877304 – BalusC 2009-12-26 00:34:33
由於BalusC提到,session_
在php的功能是要走的路,你的基本想法是健全的。但是仍然有許多不同的實現,其中一些有其陷阱。 例如,如Jonathan Samson所解釋的,使用cookie可能會導致安全漏洞。
我的PHP是一個有點生疏,但我記得session_
-functions也可以使用URL中的編碼會話ID。 (還有有這個自動添加到所有本地鏈接(如GET)和形式的目標(如POST)的選項。但是,這也不是沒有風險的,無論是。),以防止會話劫持複製SID爲的一種方式記住IP地址並將其與任何帶有有效會話ID的請求進行比較,以將其與發送此請求的IP進行比較。
正如你所看到的,底層的方法僅僅是個開始,還有更多的事情要考慮。因此,需要考慮SapphireSun的建議:通過使用經過良好測試的庫,您可以獲得高級別的安全性,而無需花費寶貴的開發時間來開發自己的會話系統。我會推薦這種方法適用於任何想要在現實世界中部署的系統。
OTOH,如果你想了解PHP會話和安全問題,你一定要自己做,如果只是爲了瞭解不做;-)
歡迎StackOverflow上。偉大的第一個問題 – Sampson 2009-12-25 23:58:11
謝謝!準備好更多的問題; P – Erkka 2009-12-26 00:20:56