Stalo sa vám niekedy, že ste robili nejakú stránku, ktorá potrebovala prihlasovanie na základe dvoch údajov: mena a hesla?
A stalo sa vám, že ste mali problémy s korektným odhlasovaním, alebo že ste sa vôbec nemohli prihlásiť? V tomto článku uvádzam niektoré typy autentifikácie.
Ešte predtým treba povedať, že autentifikácia cez cookie má jednu chybu: totiž užívateľ, ktorý nemá v prehliadači zapnuté cookies sa nemôže korektne prihlásiť.
1. HTTP autentifikácia - pozri ukážku - pozri zdroj
<?php
function autentifikacia () {
header("WWW-Authenticate: Basic realm=\"Názov autentifikácie\"");
header("HTTP/1.0 401 Unauthorized");
echo "Text, ktorý sa zobrzí pri nesprávnom zadaní mena a hesla.";
die();
}
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
"meno" => "heslo",
"user" => "password"
);
if (isset($users[$_SERVER["PHP_AUTH_USER"]])
&& $users[$_SERVER["PHP_AUTH_USER"]] == $_SERVER["PHP_AUTH_PW"]
&& $_REQUEST["log"] != "out") {
echo "Vitaj, užívateľ ".$_SERVER["PHP_AUTH_USER"]."<br />\n"
."<a href=\"".$_SERVER["SCRIPT_NAME"]."\">INDEX</a><br />\n"
."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
autentifikacia();
}
?>
2. Autentifikácia cez cookies - pozri ukážku - pozri zdroj
<?php
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
"meno" => md5("heslo"),
"user" => md5("password")
);
if ($_POST["logni"] == "ma") {
if (isset($_POST["meno"]) && $users[$_POST["meno"]] ==
md5($_POST["heslo"])) {
setcookie("authname",$_POST["meno"],time()+1800); // cookie
bude ulozeny 1800 sekund, ak sa stranka neobnovy
setcookie("authpass",md5($_POST["heslo"]),time()+1800); //
cookie bude ulozeny
1800 sekund, ak sa stranka neobnovy
$_COOKIE["authname"] = $_POST["meno"];
$_COOKIE["authpass"] = md5($_POST["heslo"]);
} else {
echo "CHYBA!<br />\n";
}
}
if (isset($users[$_COOKIE["authname"]])
&& $users[$_COOKIE["authname"]] == $_COOKIE["authpass"]
&& $_REQUEST["log"] != "out") {
setcookie("authname",$_COOKIE["authname"],time()+1800); // obnovenie
cookie
setcookie("authpass",$_COOKIE["authpass"],time()+1800); // obnovenie
cookie
echo "Vitaj, užívateľ ".$_COOKIE["authname"]."<br />\n"
."<a href=\"".$_SERVER["SCRIPT_NAME"]."\">INDEX</a><br />\n"
."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
setcookie("authname"); // odstarni cookie
setcookie("authpass");
echo "<form method=\"post\">\n"
."<input type=\"hidden\" name=\"logni\" value=\"ma\">\n"
."Meno: <input type=\"text\" name=\"meno\" value=\"\"><br />\n"
."Heslo: <input type=\"password\" name=\"heslo\" value=\"\"><br />\n"
."<input type=\"submit\" name=\"submit\" value=\" OK \">\n"
."</form>\n";
}
?>
Autentifikácia cez session - pozri ukážku - pozri zdroj
<?php
session_start();
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
"meno" => md5("heslo"),
"user" => md5("password")
);
if ($_POST["logni"] == "ma") {
if (isset($_POST["meno"]) && $users[$_POST["meno"]] ==
md5($_POST["heslo"])) {
$_SESSION["authname"]=$_POST["meno"];
$_SESSION["authpass"]=md5($_POST["heslo"]);
} else {
echo "CHYBA!<br />\n";
}
}
if (isset($users[$_SESSION["authname"]])
&& $users[$_SESSION["authname"]] == $_SESSION["authpass"]
&& $_REQUEST["log"] != "out") {
echo "Vitaj, užívateľ ".$_COOKIE["authname"]."<br />\n"
."<a
href=\"".$_SERVER["SCRIPT_NAME"]."?".session_id()."\">INDEX</a><br />\n"
."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
unset($_SESSION["authname"],$_SESSION["authpass"]);
echo "<form method=\"post\">\n"
."<input type=\"hidden\" name=\"logni\" value=\"ma\">\n"
."Meno: <input type=\"text\" name=\"meno\" value=\"\"><br />\n"
."Heslo: <input type=\"password\" name=\"heslo\" value=\"\"><br />\n"
."<input type=\"submit\" name=\"submit\" value=\" OK \">\n"
."</form>\n";
}
?>