PHP (71) - Přihlašování uživatelů na portál
Tož, uživatele již máme. Pojďme je tedy přihlásit (a odhlásit) z našeho výcvikového portálu.
26.11.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 102473×
Komerční sdělení: Pořádáme Kurzy PHP
Dnes na náš portál doplníme funkci pro přihlašování a odhlašování
uživatelů, které jsme si v předchozím díle seriálu vytvořili. Uvidíte,
že to nemusí být až tak jednoduché, jak to na první pohled může vypadat.
Pozn.: Množí se dotazy, zda demoverze portálu bude umět všechny
popisované funkce - ano, bude. Takže si skutečně můžete založit "účet"
a testovat to s námi. Jak budou v jednotlivých dílech přibývat funkce,
tak bude příklad upravován, aby vždy fungoval tak, jak je v článku
vysvětleno.
Rozbor
Jednoduše - v odkazech v levé části stránky je položka Přihlásit. Ta
povede na skript, který bude zajišťovat přihlašování uživatelů.
Jestliže bude uživatel již přihlášen, změní se text odkazu z
"Přihlásit" na "Odhlásit" a odkaz povede na skript pro odhlášení. Časem
možná budeme chtít někde vypsat, kdo je aktuálně přihlášen (alespoň
přezdívku), takže bychom na to již v této fázi měli myslet na o
přihlášeném uživateli bychom si měli uložit na dobře dostupné místo
nějaké informace.
Přihlašování uživatelů
Teď napíšu něco triviálního - pro přihlášení bude muset uživatel
znát přezdívku a heslo. Takže přihlašovací skript (nazveme si jej třeba
prihlaseni.php) bude pochopitelně obsahovat formulář pro zadání
přezdívky a hesla a při ověřování je musí porovnat s údaji v databázi.
Podstatnou část formuláře přitom můžeme opsat z minulého dílu - z
formuláře pro registraci.
Co je nové a co se musí nějak rozhodnout je následující věc: co
udělat s uživatelem, jehož přihlašovací údaje souhlasí? Tento údaj je
od nynějška nutné vést v patrnosti, a to tak dlouho, dokud se uživatel
neodhlásí. Navíc, je tuto skutečnost nutné nějak sdělit všem
následujícím stránkám, které uživatel před svým odhlášením navštíví.
Takové věci se dají udělat například pomocí cookies nebo pomocí
sessions. Jedno
i druhé
jsme již v seriálu rozebírali.
Zvolíme například sessions. Jako praktické se mi ukázalo nejen
evidovat zda je nějaký
uživatel přihlášen, ale rovněž jaký to
je uživatel. Pravděpodobně si vzpomínáte, že v minulém díle jsme v
tabulce uživatelů definovali pole ID, které se automaticky zvyšuje o
jedničku s každým novým uživatelem. Právě toto pole pro daného
uživatele budeme ukládat do session proměnné $_SESSION["id"] a tak
budeme mít uživatele jednoznačně určeného.
Neboli, po úspěšném přihlášení se skript postará o to, aby v
proměnné $_SESSION["id"] byl identifikátor aktuálního uživatele.
Ověřovací část skriptu prihlaseni.php potom může vypadat nějak takto:
<?
function iduzivatele
($prezdivka, $heslo, $link)
{
$vysledek=mysql_query("select id from
uzivatele where prezdivka='".$prezdivka."' and heslo='".$heslo."'", $link);
if (mysql_num_rows($vysledek)==0)
return false;
else {
$radek = mysql_fetch_array($vysledek);
return $radek["id"];
}
}
// tělo skriptu - nejprve si vytvoříme
odkaz na databázi
$link=mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DBNAME);
$BudemeZobrazovat=true;
if (!empty($_POST)) // už se odeslalo
{
$id =iduzivatele($_POST["prezdivka"], $_POST["heslo"], $link);
if (!$id) echo "Uživatelské
jméno a/nebo heslo nesouhlasí";
else
{
$BudemeZobrazovat=false;
$_SESSION["id"]= $id;
}
}
?>
Bude tento přístup fungovat? Sám o sobě jistě fungovat bude. Problém
je, že údaj o tom, že se přihlášení zdařilo budeme mít k dispozici až v
okamžiku vyhodnocení funkce iduzivatele(). Pečlivý čtenář si jistě
všimne, že tato funkce je až ve skriptu prihlaseni.php. To může vadit a
nemusí. Kdybychom například ihned po přihlášení chtěli v souboru
navigace.php změnit příkaz "Přihlásit" na "Odhlásit" a zapsat něco ve
smyslu:
<?if (isset($_SESSION["id"])):?>
<p><a
href="index.php?clanek=odhlaseni">Odhlásit</a></p>
<?else:?>
<p><a
href="index.php?clanek=prihlaseni">Přihlásit</a></p>
<?endif?>
tak to NEBUDE fungovat podle očekávání. Důvod je prostý - soubor
navigace.php se totiž do výsledné stránky vkládá dřív než soubor
prihlaseni.php a chudák navigace.php nemá ani ponětí, že budeme
nastavovat nějakou session proměnnou, tatož aby věděl, jaká bude její
hodnota. Takže kdybyste upravili soubor navigace.php podle receptu
uvedeného výše, bude to fungovat až po opětovném načtení stránky.
Jelikož to vypadá neprofesionálně, zkusíme to trochu vylepšit. Trik
spočívá v tom, že když se budeme přihlašovat (a následně rovněž
odhlašovat), provede se nastavení (nebo zrušení) proměnné
$_SESSION["id"] jako úplně první věc ve skriptu, ještě předtím, než se začne zpracovávat
soubor navigace.php. My to ve výukovém příkladu celé umístíme rovnou do
souboru index.php, dalo by se to však i včlenit jako samostatný soubor.
Podívejte se,
jak nyní vypadá soubor index.php.
Odhlašování
Uvědomme si, že "přihlášení" znamenalo pro náš skript dvě věci:
- Odkontrolovalo se, zda údaje souhlasí s databází
- Pokud ano, nastavila se session proměnná $_SESSION["id"]
Proto je proces "odhlašování" velmi jednoduchý. Nic se kontrolovat
nemusí, a opravdu tedy stačí zrušit nastavení proměnné $_SESSION["id"].
Což uděláme rovněž ve skriptu index.php. V tu chvíli již zbytek stránky
bude vědět o tom, že jsme se odhlásili.
Změny na portálu
Přijde mi praktické okomentovat nějak všechny změněné soubory, takže
se o to počínaje tímto dílem pokusím:
Nové soubory:
Změněné soubory:
- index.php
- nastartování session, aplikační logika pro přihlašování a odhlašování
a přesunutí vloženého souboru výše v těle skriptu
- navigace.php
- viz článek
- func.php
- přidána funkce iduzivatele pro zjištění, zda má správné heslo
Na současný stav projektu se můžete na našem webu podívat
nebo si jej můžete stáhnout.
Pozn.: Aby Vám stažená verze
fungovala na lokálním stroji, upravte si hodnotu konstant SQL_HOST,
SQL_USERNAME, SQL_PASSWORD a SQL_DBNAME. Případně si je můžete včlenit
do konfiguračního souboru podobně, jako jsem to udělal v souboru
func.php.
Verze pro tisk
| |
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
23.5.2013 6:20 /MaReK Olšavský Lektoři, kteří používají e-learning, se již nejspíše setkali s platformou Moodle, jejíž vývojáři vydali verzi 2.5 populární platformy. Vedle několika stovek drobných vylepšení přibyly i novinky v mobilním přístupu, podpora twitterovského Bootstrapu pro témata, nebo instalace pluginů přes administrátorskou část webového rozhraní.
Přidat komentář
23.5.2013 6:20 /MaReK Olšavský Nová distribuce Pidora by měla zajímat Fedoristy, kteří mají Raspberry-Pi, jelikož je optimalizovaným spinem právě pro tuto platformu. Novinky Pidory shrnul Rick Lehrbaum .
Přidat komentář
23.5.2013 6:20 /MaReK Olšavský Krátce po vydání Debianu 7 vyšel i Debian GNU/Hurd 2013. Jádro GNU/Hurd se vyvíjí delší dobu, než Linux, ale zatím je spíše zajímavostí, protože jádro Linux se etablovalo u velkých společností a změna kurzu je více než nepravděpodobná.
Přidat komentář
22.5.2013 6:46 /MaReK Olšavský Svobodný software ve státní sféře nejsou jen vítězství, ale i mýty a pověry, které jej vylučují z výběru. 5 nejčastějších hloupostí o F/L/OSS zkritizoval Adam Firestone na stránkách OpenSource.com. Nesetkáváme se s podobnými argumenty i při snaze prosadit svobodný software ve firmách a u soukromých osob?
Přidat komentář
22.5.2013 6:46 /MaReK Olšavský Embedovatelná databáze SQLite byla vydána ve verzi 3.7.17, která nabízí větší rychlost (v některých úlohách až dvojnásobnou), opravy několika chyb, nebo vylepšení možností nahrávání rozšíření. O SQLite se píše výrazně méně, než o konkurenci, ale velmi pravděpodobně jde o nejčastěji nasazené řešení, díky mnoha aplikacím.
Přidat komentář
22.5.2013 6:45 /MaReK Olšavský 14. května 2013 IBM oznámila konec vývoje Lotus SmartSuite , Lotus Organizer a Lotus 1-2-3, balíků aplikací, jež byly považovány za špičku v oboru. Krátký nekrolog za legendární Lotus 1-2-3, který byl vyvíjen 30 let, sepsal Steven J. Vaughan-Nichols.
Přidat komentář
21.5.2013 7:05 /MaReK Olšavský Vydání nástupce kdysi velmi populární distribuce GNU/Linuxu, Mandrake/Mandrivy, Mageia již nebude dále odkládáno, s 2 měsíčním zpožděním vyšla Mageia 3. Z novinek vybíráme: KDE 4.10.2, GNOME 3.6, LibreOffice 4.03, nebo Steam pro Linux. Mageia patří mezi distribuce, které lze doporučit méně zkuženým uživatelům.
Přidat komentář
21.5.2013 7:05 /MaReK Olšavský Chytré telefony s operačním systémem Sailfish OS (který vytváří společnost Jolla, jež vznikla z bývalých vývojářů Maema Nokie) se blíží uvedení na trh, předobjednávka s dodáním na konci roku 2013 a kompatibilita s Androidími aplikacemi ukazují na blízkost cíle. Rozhovor s Marcem Dillonem odhaluje mnohé z pozadí vývoje. Není bez zajímavosti, že první aplikace byla zveřejněna pouhých 29 minut po vydání SDK.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
18.5.2013 17:55 /
Martin Kumst Re: zaheslování bash scriptu nebo složky
18.5.2013 7:44 /
--- Re: Prosím o pomoc či radu
15.5.2013 19:21 /
Filip Vaněček Cesty k souborům při používání coolurl
13.5.2013 6:50 /
Radim Kolář Zabbix
8.5.2013 6:07 /
MaReK Olšavský Web Upd8
Více ...
|