abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 10:55 | Nová verze

Jean-Baptiste Kempf, prezident neziskové organizace VideoLAN stojící za svobodným multiplatformním multimediálním přehrávačem a frameworkem VLC, oznámil v příspěvku na svém blogu vydání první oficiální verze 0.1.0 v říjnu představeného dekodéru svobodného videoformátu AV1 (AOMedia Video 1) s názvem dav1d (Dav1d is an AV1 Decoder). Jedná se o alternativu k referenčnímu dekodéru libaom. Kódový název dav1da verze 0.1.0 je Gazelle.

Ladislav Hagara | Komentářů: 0
dnes 10:22 | Nová verze

Po více než dvou letech od vydání verze 11.0 byla vydána nová major verze 12.0 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 3
včera 19:55 | Nová verze

Byla vydána verze 3.11 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Řešena je řada bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
včera 15:22 | Nová verze

Byl vydán Mozilla Firefox 64.0. Přehled novinek v poznámkách k vydání a na stránce věnované vývojářům. Nejnovější verze tohoto webového prohlížeče přináší například ovládání více panelů, nebo správce úloh, který lze otevřít v nabídce Firefoxu > Více > Správce úloh, nebo napsáním about:performance do adresního řádku.

Ladislav Hagara | Komentářů: 6
včera 13:00 | Zajímavý článek Ladislav Hagara | Komentářů: 0
10.12. 22:33 | Nová verze

Po 3 měsících vývoje od vydání verze 14 byla vydána nová stabilní verze 15 open source systému Nextcloud, forku ownCloudu, umožňujícího provoz vlastního cloudového úložiště. Přehled novinek i s náhledy v příspěvku na blogu. Pro vyzkoušení Nextcloudu je k dispozici demo.

Ladislav Hagara | Komentářů: 6
10.12. 18:00 | IT novinky

Počítačová hra Doom slaví 25 let. Společností id Software ji vydala 10. prosince 1993. Zahrát si ji lze například na Internet Archive.

Ladislav Hagara | Komentářů: 17
9.12. 23:55 | Zajímavý článek

Nakladatelství Raspberry Pi vydalo 244 stránkového průvodce pro úplné začátečníky s jednodeskovým počítačem Raspberry Pi The Official Raspberry Pi Beginner’s Guide (pdf). Programování ve visuálním programovacím jazyce Scratch je věnována nová příručka Code Club Book of Scratch Volume 1 (pdf). Vydáno bylo také třetí číslo časopisu věnovaného počítačovým hrám Wireframe (pdf).

Ladislav Hagara | Komentářů: 0
9.12. 23:44 | Nová verze

U příležitosti oslav jednoho roku prací na debianím balíčku, vyšlo GPXSee 7.0. Nová verze přináší zejména podporu vektorových map (Mapbox PBF) pomocí nově vzniklého Qt pluginu.

Martin Tůma | Komentářů: 8
7.12. 23:33 | Nová verze

UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch (seznam podporovaných zařízení), oznámila vydání nové verze Ubuntu Touch OTA-6. Zdůrazněna jsou například vylepšení webového prohlížeče Morph.

Ladislav Hagara | Komentářů: 0
Chystáte se přejít na Wayland na „desktopu“?
 (26%)
 (6%)
 (12%)
 (29%)
 (27%)
Celkem 109 hlasů
 Komentářů: 14, poslední 10.12. 12:19
Rozcestník

Přihlašování uživatelů do webové aplikace v PHP

30. 6. 2003 | Pavel Beníšek | Programování | 44338×

Potřebujete zabezpečit přístup? Kompletní popis implementace pomocí PHP a MySQL včetně zdrojového kódu.

Několikrát jsem již stál před problémem vytvořit přihlašování uživatelů do webové aplikace v PHP/MySQL. Vždy jsem to řešil úplně od začátku. Nedávno opět přišel požadavek na vytvoření aplikace včetně přihlašování uživatelů, tak jsem se konečně rozhodl napsat "něco" univerzálnějšího.

Vybavení

Jak jsem již uvedl výše, k realizaci přihlašování je potřeba PHP nainstalované jako modul serveru, databáze MySQL, ve které budou uloženi uživatelé a údaje o nich. Webový server Apache (aplikace by měla fungovat i na MS IIS, bohužel nemám možnost to vyzkoušet) a prohlížeč s podporou "Cookies".

Možnosti přihlašování

Vymyslet kam ukládat data nedalo moc práce. Databáze se pro tento účel přímo nabízí. Protože používám MySQL, padla volba na ni. Asi nedůležitější problém bylo určit typ autorizace nebo lépe řečeno cestu předávání údajů od klienta serveru. Zde je na výběr z několika možností.

HTTP autentifikace. Ta mi připadá poněkud nebezpečná z důvodu předávání jména a hesla při každém požadavku v hlavičce a to u typu Basic dokonce v čistém textu. Její výhodou je snadnost použití. Prohlížeč totiž předává po přihlášení přihlašovací jméno uživatele a heslo automaticky bez dalších zásahů.

Session autentifikace. Další možností je tedy nepřímé předávání za pomocí session, kde může být použito ověření podle údajů z formuláře. Dále není nutné posílat heslo při každém požadavku, ale stačí předávat jednoznačně určitý řetězec. Nevýhodou je větší množství práce, protože nám prohlížeč nic neulehčí a vše musíme kontrolovat sami. Ještě že má PHP alespoň výborný session management. Bez něj by to bylo složitější.

Zvolil jsem tedy z důvodu bezpečnosti druhou metodu: přihlašování pomocí sessions.

přihlášení  přihlášení

Přihlášení uživatele

Při úspěšném přihlášení uživatele je vygenerován náhodný řetězec, který se uloží do databáze do položky daného uživatele, a zároveň se zapíše do session proměnné. Tam si uložíme i přihlašovací jméno uživatele. To sice není nutné, ale pro ladění je snadnější jej stále mít na očích.

Z bezpečnostního hlediska je dobré kontrolovat i IP adresu přihlášeného uživatele, takže si ji také zapíšeme do databáze. Další věcí, kterou budeme kontrolovat, je doba posledního přístupu uživatele. Tím získáme možnost jej automaticky odhlásit po určité době nečinnosti. Snažil jsem se o co nejjednodušší přístup a ovládání, a proto jsem se rozhodl pro maximální samostatnost. Tu umožní zabalení potřebných funkcí do třídy login.

Databáze

Samozřejmě je důležité nastavení databáze pro uživatele, který se připojí. To zde však popisovat nebudu, protože předpokládám funkční alespoň základní nastavení. V souboru includes/db_init.php probíhá připojování, takže je nutné nejdříve změnit hodnoty $myhostName, $mydbName, $myuserName a $myPW na takové, aby odpovídaly vašemu nastavení. Nyní je nutné vytvořit databázi nebo jen tabulku s uživateli. K tomu nám pomůže následující SQL dotaz.

CREATE TABLE test_users (
 id int(11) NOT NULL auto_increment,
 username varchar(20) NOT NULL default '',
 pw varchar(32) NOT NULL default '',
 firstname varchar(16) NOT NULL default '',
 lastname varchar(16) NOT NULL default '',
 session varchar(32) NOT NULL default '',
 ip varchar(15) NOT NULL default '',
 lasttime datetime NOT NULL default '0000-00-00 00:00:00',
 UNIQUE KEY id (id)
) TYPE=MyISAM;

Protože jsou hesla v databázi hashovány metodou md5, zde je část PHP kódu, který vloží uživatele "test" s heslem "test" do databáze. Samozřejmě musí předcházet připojení k databázi.

$myusername="test";
$mypw=md5("test");

$query="INSERT INTO test_users SET username='".$myusername."', pw='".$mypw."'";
$result = mysql_query($query,$db);

header.php

Pro základní autentifikaci nám tedy slouží soubor includes/header.php. Zde startujeme session, vnořením souboru includes/db_init.php se připojíme k databázi, inicializujeme třídu login, otestujeme zda zavolat metodu pro přihlášení /$login->first_login()/ nebo odhlášení /$login->logout()/ a vypíšeme html hlavičku.

<?
// soubor header.php
// zahájení relace session
session_start();

// připojení k databázi MySQL
include "includes/db_init.php";

//načtení soboru s třídou login
include "includes/login.php";

//inicializace třídy login
$login = new login;

//jestliže je proměnná logout nastavena na 1 provede se odhlášení
if($logout==1){
    $login->logout();
}

// jestliže je odeslán přihlašovací formulář, testuje se jméno a heslo
if(isset($login_name) and isset($login_pw)){
    $login->first_login();
}

// zobrazení hlavičky html dokumentu
?><html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso8859-2" />
 <!--<link rel="stylesheet" media="screen" type="text/css" href="style.css" />-->
</head>
<body>

login.php

Soubor login.php obsahuje definici třídy login a obsažené metody. Na začátku definujeme použité proměnné uvnitř třídy. Zde stojí za povšimnutí proměnné:

$login->is_logged - podle této proměnné můžeme zjišťovat, zda je uživatel přihlášen

$login->checktimelimit - doba neaktivity, po které uživatele odhlásíme.

V další části je konstruktor třídy. Tak se nazývá metoda pojmenovaná stejně jako třída /v našem případě login()/. Ta se provede automaticky při inicializaci třídy.

Zde vás mohou zarazit tři řádky s voláním metody test_sql(). Ty by měly odfiltrovat případný pokus o útok metodou SQL inject u vstupních dat.

// zabezpečení proti útokům typu SQL inject
$this->session_login_string=$this->test_sql($this->session_login_string);
$this->login_name=$this->test_sql($this->login_name);
$this->login_pw=$this->test_sql($this->login_pw);

Další důležitou položkou je proměnná $this->table, kde musíme mít nastaveno jméno tabulky, ze které získáváme údaje o uživatelích.

$this->table="test_users";

Metoda first_login() se stará o prvotní přihlášení uživatele. Zkontroluje údaje předané z formuláře, vygeneruje náhodný řetězec, zapíše řetězec a datum do databáze a řetězec s přihlašovacím jménem do cookies. Pokud se podařilo přihlásit, naplní ještě proměnné třídy metodou load(). Podle návratové hodnoty můžeme kontrolovat, zda se přihlášení zdařilo (1-true/0-false).

Metoda logout() se stará jak již název napovídá o odhlášení. Zapíše do databáze jiný string pro session a ukončí session relaci.

Metoda load() slouží pro načtení dat a jejich uložení do interních proměnných. Většinou je volána z metody logged().

Konečně metoda show_login_form() vypíše formulář pro přihlášení. Zde je požadováno uživatelské jméno a heslo.

index.php

Posledním souborem, který jsme neprobrali, je vlastně ten první. Přes něj vstupujeme na podstránky. Na začátku je vnoření souboru includes/header.php, přes nějž a návazně includes/login.php se provede vše spojené s přihlašováním. Ve zbytku souboru se již jen podle získané hodnoty v proměnné $login->is_logged rozhodujeme, jakou část kódu provedeme. Například když není uživatel přihlášen, zobrazíme formulář. Pokud je uživatel přihlášen, zobrazíme mu aktivní odkazy v menu. Ale to již záleží na vás, jakou funkčnost do aplikace zabudujete.

Doufám, že jsem vám byl alespoň trochu nápomocen. Snažil jsem se komentovat všechny důležité části, a dokonce jsem se přemohl a komentáře jsou i s nabodeníčky ;)

Zdrojový kód stahujte zde.

       

Hodnocení: 42 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

30.6.2003 08:37 d@n
Rozbalit Rozbalit vše poděkování
Chci autorovi velmi poděkovat za tento článek, přál bych si, aby se na téma php a php+mysql takto dle mého názoru dobře napsaných článků zde objevovalo více.
30.6.2003 09:10 Ara Sheet
Rozbalit Rozbalit vše doplnenie
Velmi zaujimavy clanok, avsak este by sa to dalo jemne doladit oddelenim html od php kodu. Na funkcnosti by to vsak vobec nepridalo, avsak umoznilo by to lahsiu skinovatelnost. Inac urcite to ulahci pracu mnohym zacinajucim webeloperom a vzhladom na prepracovanu funkcnost sa to uchyti aj v zlozitejsich aplikaciach.
30.6.2003 10:13 z3ro
Rozbalit Rozbalit vše jenom par pripominek ....
Basic http-auth neni sice plaintext, ale je fakt, ze base64 encoding neni zadna prekazka ;o] pokud jde o kontrolu IPcka, tak to nepouzivam, protoze sem se setkal se situacema, kde se muze zmenit pritupove IP (napr. clovek si pri vypnute siti vklidu vyplni formular, pak zapne modem a odesle - i kdyz obvykle by mel dostat stejny IPcko ale ne vzdy, nebo treba http-proxy bezici na vice strojich) - proste existuji vyjimky, takze je lepsi pouzit https nez omezovat nektery lidi ... ta test_sql je kravina ;o] ten retezec mas vzdy v apostrofech, takze problem by nastal kdyby se v onom vstupnim textu vyskytoval apostrof, takze se to resi... "SELECt ...WHERE pwd='".add_slashes($input)."'" ... s tim, ze pokud mas defaultne nastaveny PHP [php.ini: magic_quotes_gpc=1], tak aplikuje add_slashes na vsechny hodnoty vstupujici od clienta, takze uz to neni treba resit ... naopak, pokud nemas zaply macic_quotes, tak musis add_slashes aplikovat na vsechno, login, passwd, jinak mas (pro jednoduchost) treba select " ... WHERE heslo = '$input'" ... a client da na vstupu $input = " ' OR 'x' = 'x"; a je doma ...
30.6.2003 14:07 valy
Rozbalit Rozbalit vše jenom par pripominek ....
ad IP: jeste bych doplnil jeden pomerne aktualni problem se zmenou IP... jsem pripojen pres Eurotel Data Nonstop a pokud prijmu hovor, ktery trva dele, tak se nekdy stane, ze GPRS spojeni se ukonci a po ukonceni hovoru se navaze nove - internet sice "bezi dal", ale s jinou IP... (pokud si nenachate pridelit pevnou IP (za poplatek)) jinak prinosny clanek ;)
17.6.2005 14:28 lix
Rozbalit Rozbalit vše Re: jenom par pripominek ....
take jsem se setkal s tim ze se v prubehu pripojeni zmenilo IP zakaznika. Mam svuj vlastni login system (velmi podobny tomuto) a jednoduche reseni je ke kazdemu uctu pridani volby "use_ip". Pokud ma hodnotu 0, tak se kontrola IP neprovadi ;)
30.6.2003 14:47 goldenfish | skóre: 38 | blog: aqarium | Praha
Rozbalit Rozbalit vše jenom par pripominek ....
osobne bych daval fukce addslashes() a stripslashes() na vse co jde z a do database. spolehat se na to, ze server, na ktery date aplikaci , je volba magic_quotes_gpc zapnuta, se mi nezda jako nejlepsi. pocitejte s tim, ze aplikaci muzete pouzit i nekde jinde a totez i casti kodu. a potom si muzete trhat vlasy, kdyz predelavate cele kusy zdrojaku. mozna ma nekdo jiny nazor.
kontrola IP je hezka vec, ale staci kdyz jsou dva lidi za proxinou a pouzivaji stejnou aplikaci.
Pavel Kysilka - www.linuxsoft.cz
30.6.2003 16:49 z3ro
Rozbalit Rozbalit vše jenom par pripominek ....
donedavna sem k tomu takto pristupoval, ale vzledem k tomu, ze to je standartne zaple tak to clovek nesmi zapomenout localne vypnout .... (jinak to pak nefunguje spravne) ale hlavne se radsi drzim bezpecnejsiho defaultniho nastaveni php a pocitam s tim ze je to zaple stejne jako treba register_globals=off, protoze clovek nikdy nevi kdy nekde zapomene neco odslashovat apod... samozrejme zalezi na konkretni situaci, obecne bych se ale drzel defaultniho (dneska uz pomerne bezpecneho) nastaveni php uz neni zadny problem na zacatek nejakyho initscriptu vrazit: if (!get_magic_quotes_gpc()) die("invalid magic_quotes_gpc setting"); apod.... krome toho rozumny webmaster chce mit bezpecneji nastavene php, a pak sosne nejakou php aplikaci a zjisti ze mu to s timto nastavenim nebezi (klasicky pripad: register_globals=off) ;]]
30.6.2003 17:22 met | skóre: 9 | Praha
Rozbalit Rozbalit vše jenom par pripominek ....
> krome toho rozumny webmaster chce mit bezpecneji nastavene php, a pak sosne nejakou php aplikaci a zjisti ze mu to s timto nastavenim nebezi (klasicky pripad: register_globals=off) To znam a to bych kolikrat strilel :-(
1.7.2003 07:40 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše jenom par pripominek ....
krome toho rozumny webmaster chce mit bezpecneji nastavene php neodpustim si poznamku: bezpecnost a PHP, to jde dohromady? ;-)
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
Pavel Beníšek avatar 1.7.2003 13:02 Pavel Beníšek | skóre: 27
Rozbalit Rozbalit vše jenom par pripominek ....
Leoši: bezpecnost a java to jde dohromady? :) .. ono se vsude nejdou nejaky chyby, ale vetsinu bezpecnostnich chyb stejne IMHO vytvari autori aplikaci (a je temer jedno v jakem jazyce). Souhlasil jsem s tebou v clanku o web aplikaci abclinuxu, kde jsi psal ze PHP svadi k neprehlednemu stylu programovani. Je to pravda, ale stejne tak je to s bezpecnosti. Kdyz nejsi liny a das si praci, tak ji muzes docela slusne pomoci i v PHP. Pak samozrejme jeste zalezi jak mas nastaveny server/apache/php. addslashes() je dobry napad, opravdu mi to nedoslo. Diky za info. S tou IP by nemely byt problemy do chvile nez se v ramci jedne relace zmeni. Pokud bude vice uzivatelu na jedne IP, vubec to nevadi. Samozrejme ze https je bezpecnejsi, ale ne vsichni maji svuj server aby si ho mohli zapnout, takze tohle prihlasovani je klasicky kompromis cena/vykon :)
checking for chicken... must have egg first
30.6.2003 15:37 HubbleBubble
Rozbalit Rozbalit vše jenom par pripominek ....
Zajímalo by mě, jestli jde zkombinovat autorizace v Apachi a PHP. Tedy jestli se může PHP dozvědět od Apache identitu autentikovaného uživatele. Pokud autorizace proběhla prostředky, které nabízí apache.
30.6.2003 16:54 jk
Rozbalit Rozbalit vše jenom par pripominek ....
ano, staci nahlednout do manualu a koukam, je to dokonce cesky :-) http://www.php.net/manual/cs/features.http-auth.php
1.7.2003 13:23 Jirka Hradil (jirka@hradil.cz)
Rozbalit Rozbalit vše HTTPS je nutnost
Jak je cely priklad ochranen proti sniffnuti hesla snortem? Vse se posila post ve formulari-takze odchyceni hesla, pripadne celeho session ID by IMHO nebylo problem. Pri takovem typu autentizace je https naprostou nutnosti-bylo by dobre to zminit. Rovnez by bylo dobre ukladat heslo do db nikoli jako plaintext, ale napr. pres MD5. Pokud user zapomene heslo, musi mu ho admin zmenit-NIKDO, vcetne admina by nemel mit informaci o tom, jake user pouziva hesla. Spatne by nebylo pouzit md5 jiz na strane klienta-rovnou to napr. JS funkci prozene md5 a pak to teprve posle na overeni k databazi (samozrejme pres https). Dalsi veci je zamknuti uctu-po 3(nebo vice) neuspesnych prihlasenich by to melo ucet zamknout a poslat mail adminovi-jinak se vystavujeme moznosti prolomeni hrubou silou.
1.7.2003 17:03 Carlos
Rozbalit Rozbalit vše HTTPS je nutnost
Ja ten clanek cet a k -> Rovnez by bylo dobre ukladat heslo do db nikoli jako plaintext, ale napr. pres MD5. Cituji z clanku Protože jsou hesla v databázi hashovány metodou md5, zde je část PHP kódu, který vloží uživatele "test" s heslem "test" do databáze. Samozřejmě musí předcházet připojení k databázi. $myusername="test"; $mypw=md5("test"); $query="INSERT INTO test_users SET username='".$myusername."', pw='".$mypw."'"; $result = mysql_query($query,$db); nebo tim bylo mysleno neco jineho?
1.7.2003 22:34 Jirka Hradil (jirka@hradil.cz)
Rozbalit Rozbalit vše HTTPS je nutnost
Je to presne tak, mate pravdu. Prehledl jsem se. ;)
17.6.2005 14:47 lix
Rozbalit Rozbalit vše Re: HTTPS je nutnost
Castecne s vami souhlasim. Hashovani hesla na strane klienta je velmi uzitecna vec. Pokud ovsem ma navstevnik JS vypnuty, je nutno s tim pocitat a napriklad jej upozornit na bezpectnostni nasledky. Sniffnuti session ID by dle meho nazoru nebylo az takovy problem...pokud je tu ta kontrola IP, tak ma utocnik znacne stizenou praci. Nevidim prilis do problematiky "klamani IP adres" a uvitam nazory. Chci ale upozornit ze ani HTTPS neni za urcitych okolnosti 100% bezpecne. Myslim tedy, ze autorovo reseni je dobre.
Pavel Beníšek avatar 29.8.2006 12:30 Pavel Beníšek | skóre: 27
Rozbalit Rozbalit vše Re: HTTPS je nutnost
Diky. Jen doplnim, ze na klientu se heslo nehashuje. Posle se v plain textu. Tim odpada nutnost pouziti javascriptu. Castecna ochrana je, ze se alespon posila pouze pri prihlasovani a dal se pouziva vygenerovany retezec jako session id. Samozrejme ze pouziti https nic nebrani, jen to je uz trochu z jineho soudku.
checking for chicken... must have egg first
1.7.2003 14:14 Interupt
Rozbalit Rozbalit vše Chybka při odhlášení
našel jsem malou chybku: při odhlašování je samozřejmě nutné vynulovat i proměnou is_logged a to ve funkci logout jinak se při stisku tlačítka odhlásit navenek nic nestane a odhlášení se projeví až pri obnovení stránky
1.7.2003 20:22 Martin
Rozbalit Rozbalit vše Dotaz ohledně OOP
Nejsem v php zadny profik, s OOP zacinam a uz jsem myslel, ze jsem do toho trochu pronikl, ale asi ne. Jestilze je pouzita prom. $login->is_logged pro kontrolu prihlaseni, znamena to, ze kazdy uzivatel ma tuto promennou 'svoji'? Pokud tomu tak je, proc v tomto pripade pouzivat session, kdyz data jsou dostupne v $login -> xxx? Muze mi to prosim nekdo vysvetlit? dik
Pavel Beníšek avatar 24.8.2003 21:20 Pavel Beníšek | skóre: 27
Rozbalit Rozbalit vše Dotaz ohledně OOP
Protoze po nacteni stanky je nutne pokazde identifikovat jaky uzivatel na stranky pristupuje. Http je bezstavovy protokol, kdyby byl stavovy zadne sessions by nebyly nutne.
checking for chicken... must have egg first
13.8.2004 22:38 honza
Rozbalit Rozbalit vše dotaz
Mel bych takovy lamersky dotaz.... Odkazuji se na dany soubor index.php z jine stranky kliknutim na tlacitko, ale objevi se jen prazdna stranka (jako by se skript neprovedl), kdyz pak dam refresh, tak uz se nacte prihlasovaci tabulka z index.php. Nevite v cem muze byt problem?

PS: kdyz zadam primo odkaz na .../index.php, tak se vse nacte hned (nemusim davat refresh). Diky moc.
31.5.2005 14:21 Jirkas
Rozbalit Rozbalit vše Re: dotaz
Bohužel se skriptem mam podobný problém :-(
24.6.2005 14:54 Jirka
Rozbalit Rozbalit vše Re: dotaz
Trochu jsem si s tim logováním pohrál a přišel jsem na příčinu zasekávání scriptu: Zaseknutí způsobuje hlavička ale nevím proč :-(
23.11.2004 19:42 ondra
Rozbalit Rozbalit vše dotaz
Pouzil jsem tento kod a trochu ho predelal pro sve potreby. Nejsem v PHP tak dobrej abych to zvladnul, proto zapasim s automatickym odhlasovanim. Pri prihlaseni se mi naplni session v tabulce "user". Vzhledem k tomu, ze zobrazuju aktualne prihlasene uzivatele, musim pri odhlaseni session vypraznit. Nejak se nemuzu dohrabat k tomu, jak to udelat kdyz tu stranku jen zavru a neodhlasim se. System me odhlasi takze se pri dalsim pristupu na stranky nedostanu, ale pro ostatni uzivatele jsem porad pripojen, protoze session zustala naplnena. Poradi mi nekdo co s tim? DIK
Pavel Beníšek avatar 29.1.2005 22:02 Pavel Beníšek | skóre: 27
Rozbalit Rozbalit vše Re: dotaz
To bohuzel zjistite jedine tak, ze sectete pocet uzivatelu jejichz posledni pristup byl pred dejme tomu peti minutami. Jinak nez odhadem nemate moznost zjistit jestli je uzivatel "opravdu" prihlasen, nebo ne.
checking for chicken... must have egg first
23.3.2005 10:08 Radim
Rozbalit Rozbalit vše Dotaz
Pokousim se zkusit rozjet mysql a to prihlasovani. Spustil jsem server mysqld, spustil jsem sluybu klienta mysqld -u root a nacetl tu stranku index.php. Ale psalo mi to, ze 2. radek v index.php - nemuze otevrit seesion pro cteni nebo zapis. tak jsem ten prikaz start_session() vynechal a pise to chybu na 102 radku v souboru db_init, hodnota prom. result null nebo "". Spustil jsem ten server spravne? ten ctu, ze mam zadat jeste prikaz save_mysqld & - ma to na to vliv? A co vztvoreni databaze. Nenasel jsem tam zadny soubor s databazi. To si mam vytvorit sam? A co registrace, ta tam neni zabudovana? Dik.
Dekuji autorovi za clanek a za poskytnuti zdrojoveho kodu. Pokusil jsem se tento admin rozchodit, ale neuspesne. Myslim, ze pricina bude v overovani ip adresy. Jakym zpusobem, lze docasne overeni ip adresy vypnout? Diky!
Matyáš Dvořák avatar 6.9.2005 15:24 Matyáš Dvořák | skóre: 13
Rozbalit Rozbalit vše register_globals = Off
Dekuji za zajimavy clanek, jen by me zajimalo jak udelat aby skript bezel i s volbou register_globals = Off, pokud je to vubec mozne...
10.12.2005 23:34 SupuS
Rozbalit Rozbalit vše Re: register_globals = Off

Staci mala uprava scriptu napriklad takto

if($_GET[logout]==1){ $login->logout(); } if(isset($_POST[login_name]) and isset($_POST[login_pw])){ $login->first_login(); }

a bude fungovat i pri register_globals = Off

8.12.2005 10:32 relias
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Ako zmenim znakovu sadu na windows-1250? Pretoze v subore header.php to nefunguje spravne. Prosim o radu.
22.1.2006 15:49 reliassk
Rozbalit Rozbalit vše Bezpecnost?
Pouzivam Operu.
- prihlasim sa do systemu
- zobrazi sa mi stranka s menu (nazvem ju "stranka A")
- pracujem v systeme.
- odhlasim sa zo systemu.
- v prehliadaci sa vratim na stranku A, dam ju obnovit a som opat prihlaseny.

Nevite niekto poradit ako tomu zabranit. Dakujem
11.3.2006 19:59 romantic29
Rozbalit Rozbalit vše Přihlašování uživatelů do webové aplikace v PHP
Výborný článek! Chválím! Určitě nejlepší článek se zdrojovým kódem, co jsem našel!
3.8.2006 17:25 smoce
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
no super ale skouším to na Webzdarma a nejde to ukaže to toto Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/s/strilky/test/includes/login.php on line 108 a to mam dobře zadany informace o připojeni k MYSQL pls poradte
16.8.2006 15:52 SupuS
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
podivej se jestli mas stejne jmeno tabulky v login.php i v databazi

radek 46

$this->table="test-users";
16.8.2006 18:54 smoce
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
ne nepomohlo to ted to nic neukazuje ale je tam formulař vyplnim a nejde přihlasit
16.8.2006 18:57 smoce
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
už to jde diky
25.8.2006 14:15 Prkny
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Zdarvím, vše uspěšně funguje, prihlasím se na stránce index.php a deje to v poho. Ale co kdyz potrebujipřejít na jiný soubor který má být stále zabezpečený treba index2.php Stačí držet sesion na te nové stránce nebo je potřeba neco víc ?
25.8.2006 16:47 Prkny
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Fajn, vypada to ze jsem to vyresil sam, ale potrebuju aby se na to jeste nekdo kouknul abych neudelal nekde bezpecnosti botu.
Prihlasim se na index.php tak jak to je zde popsano, akorat ten odesilaci formular presmeruji na treba index2.php, kde je na zacatku tato podminka:
if ($login->is_logged<>1){
header("Location: index.php?logout=1");
Exit;
}

Tuhle podminku lze dat do jednoho souboru a pote ji includovat, tzn. Na zacatku kazdeho souboru, který budeme chtit mit zabezpeceny includujeme tuto definici a mame vystarano. Alespon doufam. Muze na to nekdo kouknout zda mi tam neco bezpecnostniho neutelko? Diky
Pavel Beníšek avatar 29.8.2006 11:22 Pavel Beníšek | skóre: 27
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Ahoj, nemusis tu stranku nikam presmerovavat, ale pokud ji musis z nejakych duvodu precejen presmerovat, tak staci mit na zacatku (jeste pred html) includovany soubor
includes/header.php
a potom uz jen kontrolujes v kodu promennou $login->is_logged. Kdyz je 1 tak je uzivatel prihlaseny a kdyz je 0 tak neni.

Ten include musi byt uplne na zacatku kvuli tvorbe session. Asi by si s tim slo pohrat a rozdelit to na dve casti, ale ja jsem to chtel mit co nejjednodussi na spravu.

Hodne stesti
checking for chicken... must have egg first
18.10.2006 21:33 alik
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Prosim muze mi nekdo poradit, co mam vyplnit v databazi? v poho se tam pripojim vyplnim kazdou kolonku jmeno heslo atd a kdyz se chci prihlasit tak nic. dik
5.9.2007 20:22 Jirka
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Mohu mít dotaz, zda se dá něco dělat pokud uživatel zapomene heslo, dá se tomuto uživateli jeho heslo poslat např. emailem ?
Matyáš Dvořák avatar 6.9.2007 06:25 Matyáš Dvořák | skóre: 13
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
neda, protoze je zasifrovane md5kou, je nutno do db proto vlozit novy md5 hash, pokud to nechces desifrovat :)
6.9.2007 17:32 Jirka
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Diky za odpoved, moc to nechapu, novy md5 hash ? Jako preprogramovat aplikaci s novym typem md5 ? Nepotrebuji nic jineho, než aby nejlepe tato prihlasovaci aplikace mohla míti možnost zaslat uzivateli stracené nebo zapomenuté heslo. Na jakém principu funguje to zasilaní hesla? Musí se to s md5 rozsifrovat a poslat uzivateli ? Děkuji
Matyáš Dvořák avatar 7.9.2007 15:43 Matyáš Dvořák | skóre: 13
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Zasilani hesla: staci vygenerovat nove heslo a poslat ho mailem uzivateli.

1) md5('jirka'); udela z jirka tento hash: 742f1e246d243ace2f7f4316c3fe6347

2) ten se ulozi do databaze misto stareho
8.9.2007 08:21 Jirka
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Co dodat více... Děkuji.
30.10.2007 17:40 Jerry
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Mě to vůbec nefunguje. Můžete mi prosím poradit? dík
30.7.2009 11:44 Martin S.
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP

Zdravím, po delší době od napsání tohoto článku jsem se k němu dostal a potřeboval bych poradit; snad se najde nějaká dobrá duše, která mi odpoví.

Funguje mi pouze úvodní stránka - stránka s informací, že uživatel je nepřihlášen a přihlašovacím formulářem. Když zadám přihlašovací údaje, tak se mi opět zobrazí tato stránka bez jakékoli změny. Stejně tak tomu je i při zadání špatných údajů, tj. nezobrazí se mi hláška o špatném přihlášení.

Formulář se ale odesílá, když zadám něco do form - action=" ", tak se mi zobrazí to, co má. Databáze by také měla fungovat, když zadám špatné přihlašovací údaje, tak se mi zobrazí chybová hláška.

Poradíte mi prosím někdo, co s tím?

Děkuji

30.8.2009 00:38 anubis
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP

AHojte, prosim vas..poradte mi, udelal jsem prihlaseni a bezi...nicmene mam jeden problem..pokud je uzivatel neprihlasen, neni aktivni menu, pokud se prihlasi, potom je menu aktivni, to je ok, ale ja potrebuju, aby kdyz se prihlasi, otevre se mu urcita stranka, treab uzivatel/zakaznik1.php, to bude ulozeno v promenny v databazi..nicmene potrebuju, aby tuto stranku nemohl otevrit nikdo jiny...aby si proste nezadal do odkazu treba uzivatel/zakaznik1.php a jemu to tu stranku neotevrelo, pokud nebude prihlasen, mozna je to pitomej dotaz, ale prosim jasnou odpoved, stejne dobrou jako byl napsany navod.. diky moc..

7.9.2009 19:07 Climberg
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP

Ahoj, me taky po nakopirovani na server prihlasovani nefungovalo, ale stacilo v souboru header.php nahradit tento radek

if(isset($login_name) and isset($login_pw)){

radkem novym

if(isset($_POST["login_name"]) and isset($_POST["login_pw"])){

Pak vyjde podminka pravdiva a zavola se fce first_login() a vse jede jak ma ;-) Se starym vychazela podminka neustale FALSE. Snad to pomuze..

11.4.2010 21:07 Jakub
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Ahoj, sice už je to starý dotaz, ale.... :)

Jak napsal Climberg, musíš použít delší zápis proměnných (POST_promenna), protože máš v PHP (konkrétní editace v php.ini) evidentně nastavené "register_globals" na Off (což je dnes když ne standard, tak rozhodně bezpečnější:)

15.5.2010 18:32 Rayen
Rozbalit Rozbalit vše Prosííím HELP me :-(
Prosím nemohl by mi někdo vysvětlit jak to zprovoznit? Stáhnul jsem si zdrojový kod a přepsal db_int. vytvořil v databázi test_user a nic. 1. problém je že se mi nechce vůbec zapsat uživatel Test do db. a ať do formu napíšu co napíšu tak se znova načte stránka index.php a nic .. žádná chyba nic to nevypíše :-( .. už sem z toho fakt zoufalej. .. pokud by mi někdo pomhl a polopaticky vysvětlil byl bych moc rád. Dík
13.6.2010 11:49 Fero
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP

Mám dotaz... ako dorobiť práva pre užívateľov napr.. tento môže ta a tento len tam ?

22.8.2010 20:11 Karel
Rozbalit Rozbalit vše UTF8
Může mi prosím někdo pomoct s UTF8? Vše jsem přeuložil do utf8, databáze je v utf8, stránky se zobrazují korektně, ale nekorektní je výstup z databáze. Místo českých znaků se zobrazí paskvily. Nevíte někdo co s tím...
2.10.2010 11:10 Tomas
Rozbalit Rozbalit vše Re: UTF8
mysql_query('SET NAMES utf8');
25.7.2011 18:04 ixyzs
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Velké Díky autorovi za návod. Velice mi zjednodušil práci :)
11.8.2011 16:35 lukinpark
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Zdravím... musím uznat, že je to opravdu super aplikace, sestavil jsem na tom celý web a paráda...

Mám ale jeden problém... Nevím čím to je, ale když jsem přihlášený a proklikávám se webem, tak se mi občas stane, že mě to odhlásí z ničeho nic... Prošel jsem celý puvodní script i můj upravený a všechno se zdá OK... nevíte kde by mohla být chyba???
13.8.2011 00:38 lukinpark
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Zjistil jsem, že se mi občas vůbec nenačtou proměnní $_SESSION["login_name"] a $_SESSION["session_login_string"]... prostě jsou prázdné... a když refrešuju stránku, tak se mi tam zase objeví...
Matyáš Dvořák avatar 13.8.2011 16:06 Matyáš Dvořák | skóre: 13
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Pozor, chystáte se komentovat 2966 dní dní starou diskusi. :)

Mozna je to nenastartovanou session nebo se tam ulozi neco jineho v prubehu skriptu.. print_r($_SESSION); ?
13.8.2011 17:10 lukinpark
Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
Problém byl na hostingu a tam, kde se sessiony ukládaly... stačilo přidat 3 řádky

ini_set('session.save_path', '/tmp');

ini_set('session.save_handler', 'files' );

session_name("nazev_sessionu");

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.