Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $path = "/"; // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno
- // např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/";
- // funkce pro ošetření vstupních dat od uživatele
- // první parametr je odkaz na připojení k db, druhý samotný ošteřovaný řetězec
- function db_escape($link, $str)
- {
- return mysqli_real_escape_string($link, $str);
- }
- include "pripojeni_db.php"; // soubor pripojeni_db.php zajistí připojení k databázi a výběr databáze, se kterou pracujeme, je nezbytné definovat v něm proměnnou $link = mysqli_connect();
- session_start(); // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane
- // možnost nastavit automatické spouštění session_start() nechávám stranou
- // zjistíme, co chce uživatel dělat
- if (isset($_SESSION['username']) && isset($_GET['logout']))
- {
- // uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení
- $_SESSION = array();
- if (isset($_COOKIE[session_name()]))
- {
- setcookie(session_name(), '', time()-42000, '/');
- }
- session_unset();
- session_destroy();
- // a přesměrujeme na index.php
- header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
- exit;
- }
- elseif (isset($_SESSION['username']))
- {
- //session_regenerate_id(); // ochrana před session fixation, lze vynechat
- // uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované
- // můžeme využit include apod.
- // tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení
- // můžeme to ale přemístit do includovaného souboru (kam se nám hodí)
- echo "<p>Přihlášen: $_SESSION[username] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n";
- }
- else
- {
- // uzivatel není přihlášen
- // pokud odeslal přihlašovací údaje, snaží se přihlásit
- if (isset($_POST['username']) && isset($_POST['password']))
- {
- // ošetříme vstupní údaje od uživatele
- // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce
- $username = db_escape($link, trim($_POST['username']));
- $password = db_escape($link, trim($_POST['password']));
- // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem
- // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/ukladani-hesel.php
- $result = mysqli_query($link, "SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')");
- $data = mysqli_fetch_assoc($result);
- if ($data) // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false
- // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla
- {
- // uložíme potřebné SESSION proměnné
- $_SESSION['username'] = $username;
- $_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán
- // po přihlášení uživatele přesměrujeme na index.php
- header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
- exit; // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna
- }
- else
- {
- // uživatel zadal neplatné přihlašovací údaje
- // přesměrujeme ho na index.php a zobrazíme chybovou hlášku
- header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303);
- exit;
- }
- }
- else
- {
- // uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme
- echo "<div>";
- if (isset($_GET['incorrect_login']))
- {
- echo "<p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</p>\n";
- }
- // zobrazíme formulář pro přihlášení
- ?>
- <form action="index.php" method="post">
- Jméno: <input name="username" type="text"><br>
- Heslo: <input name="password" type="password"><br>
- <input name="submit" type="submit" value="Přihlásit">
- </form>
- </div>
- <?php
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement