[英]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
}
這是一個非常丑陋的例子,但這涵蓋了它的內容
在發送任何其他輸出之前運行session_start(); 這會在客戶端存儲會話cookie,該cookie僅在客戶端存儲標識號。 所有其他數據都存儲在服務器端,因此用戶無法修改。
您可以在此設置幾個參數來提高安全性,包括httponly(防止通過javascript訪問cookie,幫助抵御XSS攻擊)和安全(僅通過SSL傳輸cookie)。 如果可能,應啟用這些。
只需將表單提交到您檢查密碼的頁面,它應該可以正常工作。
但是,您可能必須更改$_SERVER["REQUEST_URI"];
更具體的頁面,因為這只是您當前所在的頁面(表單提交的頁面)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.