簡體   English   中英

PHP:用戶登錄會話和cookie

[英]PHP: User logged in sessions and cookies

對不起新手問題! 我正在建立一個小網站,允許用戶創建自己的帳戶。 它不是銀行系統,因此不太可能有人想要對其進行破解。 也就是說,我試圖讓它相當安全,因為那里有很多無聊的腳本小子。

有人可以描述用戶登錄並設置cookie的基本工作流程,以保持他們登錄30天嗎?

目前,我有以下內容:

  1. 驗證並清理輸入的數據。
  2. 根據DB中的bcrypt哈希密碼檢查提供的憑據。
  3. 如果正確,則調用“登錄”功能。
  4. 登錄功能:

    一種。 使用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保存用戶憑據即可。

請參閱本教程,了解如何使用PHP會話。

PS:您可以這樣訪問數組: $_SESSION["UserID"] ,而不是使用()

您可能想看一下這篇文章,其中我已經討論了各種類型的會話劫持以及如何避免這種情況。

php中的會話安全性

首先,會話和cookie之間存在重要區別。 使用$_SESSION[".."] ,即使瀏覽器使用cookie來跟蹤會話ID,也要創建一個會話(駐留在服務器上,而cookie駐留在客戶端上)。 要創建cookie,您可以使用setcookie()方法。

就是說,我建議您通讀這篇文章 ,這是有關如何創建安全登錄腳本的逐步指南,並使用cookie的持久性“記住我”功能。 詳細描述如何做到這一點將是廣泛的SO答案我害怕。

邊注:

為了能夠寫入會話,您可能必須調用session_start(); 在使用$_SESSION[".."]獲取或設置會話變量之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM