簡體   English   中英

使用cookie進行簡單的PHP登錄

[英]Simple PHP login with cookie

我已經開始開發這個非常簡單的PHP登錄,要求輸入密碼才能訪問網站。 它還會創建一個cookie,以便在用戶關閉瀏覽器窗口之前繼續訪問。

在每個頁面的頂部,我檢查cookie:

<?php

    if(!isset($_COOKIE['authorised']) || ($_COOKIE['authorised'] != 'true'))
    {
        include('login.php'); exit;
    }

?>

如果沒有,那么我退出並顯示登錄表單:

<?php

    function pageURL()
    {
        $pageURL = 'http';
        if ($_SERVER["HTTPS"] == "on")
        {
            $pageURL .= "s";
        }
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80")
        {
            $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
        } 
        else
        {
            $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        }
        return $pageURL;
    }

    $pageRedirect = pageURL();

    if(isset($_POST['password']) && ($_POST['password'] == 'qwe123'))
    {
        setcookie('authorised', 'true'); header("Location:$pageRedirect",303);
    }
    else
    {
        include('noaccess.php'); exit;
    }

?>
<form action="<?php echo pageURL(); ?>" method="post">
<input type="password" name="password" />
                <input type="submit" title="I agree" value="I agree" name="submit" />
            </form>

當你必須同意訪問該網站時,當前的PHP來自舊的警告頁面,我想修改它以使用簡單的表單,以便如果用戶輸入密碼,例如'qwe123',那么他們創建cookie並且然后被重定向回頁面,但現在可以訪問因為cookie。 如果他們弄錯了,則包含並退出另一頁。

有人可以幫我弄這個嗎? 謝謝

請不要嘗試在客戶端cookie中存儲“已驗證”之類的內容; 那令人難以置信的不安全感。 用戶可以修改cookie中的任何內容 - 因此在這種情況下,我可以在瀏覽器設置中查找cookie,然后編輯它以將“authenticated”設置為true。 然后我會登錄,沒有用戶名或密碼。

看看PHP的會話管理功能。 您應該創建一個會話並存儲任何安全的信息服務器端,而不是客戶端。

使用會話的示例如下:

<?php
session_start();

$secretpassword = 'qwert1234';
$secretusername = 'foobar';

if ($_SESSION['authenticated'] == true) {
   // Go somewhere secure
   header('Location: secure.php');
} else {
   $error = null;
   if (!empty($_POST)) {
       $username = empty($_POST['username']) ? null : $_POST['username'];
       $password = empty($_POST['password']) ? null : $_POST['password'];

       if ($username == $secretusername && $password == $secretpassword) {
           $_SESSION['authenticated'] = true;
           // Redirect to your secure location
           header('Location: secure.php');
           return;
       } else {
           $error = 'Incorrect username or password';
       }
   }
   // Create a login form or something
   echo $error;
   ?>
<form action="login.php"><input type="text" name="username" /><input type="text" name="password" /><input type="submit" value="login" /></form>
<?php
}

這是一個非常丑陋的例子,但這涵蓋了它的內容

  • 如果用戶已經登錄,請執行安全操作(當然,secure.php腳本還應驗證用戶是否已登錄)
  • 如果用戶未登錄,但他們已提交表單,請檢查其詳細信息
    • 如果用戶名/密碼不正確,請設置錯誤消息
    • 如果用戶名/密碼正確,請將它們發送到安全的地方
  • 顯示錯誤消息(如果已設置)
  • 顯示登錄表單

在發送任何其他輸出之前運行session_start(); 這會在客戶端存儲會話cookie,該cookie僅在客戶端存儲標識號。 所有其他數據都存儲在服務器端,因此用戶無法修改。

您可以在此設置幾個參數來提高安全性,包括httponly(防止通過javascript訪問cookie,幫助抵御XSS攻擊)和安全(僅通過SSL傳輸cookie)。 如果可能,應啟用這些。

只需將表單提交到您檢查密碼的頁面,它應該可以正常工作。

但是,您可能必須更改$_SERVER["REQUEST_URI"]; 更具體的頁面,因為這只是您當前所在的頁面(表單提交的頁面)。

暫無
暫無

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

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