[英]PHP: User logged in sessions and cookies
對不起新手問題! 我正在建立一個小網站,允許用戶創建自己的帳戶。 它不是銀行系統,因此不太可能有人想要對其進行破解。 也就是說,我試圖讓它相當安全,因為那里有很多無聊的腳本小子。
有人可以描述用戶登錄並設置cookie的基本工作流程,以保持他們登錄30天嗎?
目前,我有以下內容:
登錄功能:
一種。 使用userID(包含兩列的表:SessionString和UserID)從DB中刪除任何會話數據。
灣 將新的會話數據添加到數據庫(新的隨機生成的字符串和用戶ID)。
C。 將隨機生成的字符串和用戶ID寫入Cookie。
d。 將$_SESSION("UserID")
設置$_SESSION("UserID")
$userID
。
但是雖然正在創建和寫入兩個cookie,但$_SESSION("UserID")
仍然是空白的......我猜是因為我不能隨時寫入$_SESSION
?
甚至在解決該問題之后,如何使用Cookie中存儲的數據登錄用戶? 我猜我不想在每次頁面加載時都進入數據庫。 而且仍然需要我創建一個數據庫對象,以查看Cookie中的憑據是否正確。 這是正確的方法嗎?
再一次,為新手問題道歉!
更新:
是的,我確實了解$_SESSION
變量和cookie之間的區別。 我還在每個頁面的頂部都有session_start()
(在沒有空白行的<php
之后)。 $_SESSION("UserID")
保持空白。
這是頁面頂部的代碼:
<?php
session_start();
if(!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = true;
}
謝謝您的幫助。
您是否編寫了將會話文件存儲在數據庫中的自定義會話處理程序? 我猜你沒有。
如果要使用$_SESSION
還必須執行session_start()
。 使用PHP會話時,將為您設置用於標識用戶的cookie。 您還將獲得在/ tmp目錄中創建的會話文件。 這就是變量和分配給$_SESSION
內容的存儲位置。
除非您定義自定義會話處理程序,它將管理會話文件的位置,否則您無需查詢數據庫。 只需在$_SESSION
保存用戶憑據即可。
PS:您可以這樣訪問數組: $_SESSION["UserID"]
,而不是使用()
。
您可能想看一下這篇文章,其中我已經討論了各種類型的會話劫持以及如何避免這種情況。
首先,會話和cookie之間存在重要區別。 使用$_SESSION[".."]
,即使瀏覽器使用cookie來跟蹤會話ID,也要創建一個會話(駐留在服務器上,而cookie駐留在客戶端上)。 要創建cookie,您可以使用setcookie()方法。
就是說,我建議您通讀這篇文章 ,這是有關如何創建安全登錄腳本的逐步指南,並使用cookie的持久性“記住我”功能。 詳細描述如何做到這一點將是廣泛的SO答案我害怕。
邊注:
為了能夠寫入會話,您可能必須調用session_start();
在使用$_SESSION[".."]
獲取或設置會話變量之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.