abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:00 | IT novinky

    DuckDuckGo AI Chat umožňuje "pokecat si" s GPT-3.5 Turbo od OpenAI nebo Claude 1.2 Instant od Anthropic. Bez vytváření účtu. Všechny chaty jsou soukromé. DuckDuckGo je neukládá ani nepoužívá k trénování modelů umělé inteligence.

    Ladislav Hagara | Komentářů: 1
    včera 14:22 | IT novinky

    VASA-1, výzkumný projekt Microsoftu. Na vstupu stačí jediná fotka a zvukový záznam. Na výstupu je dokonalá mluvící nebo zpívající hlava. Prý si technologii nechá jenom pro sebe. Žádné demo, API nebo placená služba. Zatím.

    Ladislav Hagara | Komentářů: 2
    včera 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    včera 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    18.4. 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    18.4. 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    18.4. 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 13
    18.4. 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 2
    18.4. 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 10
    18.4. 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    KDE Plasma 6
     (68%)
     (11%)
     (2%)
     (20%)
    Celkem 566 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

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

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

    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.
    13.12.2021 06:42 geebranz
    Rozbalit Rozbalit vše Re: poděkování
    This has been really helpful

    Rely
    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 User682 | 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.
    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");
    3.6.2023 00:28 builder16
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    "Thanks for sharing this interesting blog here
    Edmonton Tree Removal

    '
    bol@treeremovaledmonton.org"
    11.7.2023 18:04 spam
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    "Such an awesome post. Thanks for sharing! " Movers Red Deer
    30.8.2023 00:28 boL16
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    "Thank you for this amazing blog!

    Tree Service Santa Fe
    12.10.2023 20:40 boL16
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    "Very useful and informative post! Concrete Red Deer"
    7.11.2023 19:22 builder16
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    I really enjoy reading your posts. great work! Accounting Firm Sherwood Park
    4.12.2023 21:11 builder16
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    I really enjoy reading your posts. great work! Carpet Cleaning Regina
    29.1. 17:12 spam
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    Thank you for sharing this with us. Accountants Grande Prairie
    16.2. 11:40 Jaxhelm
    Rozbalit Rozbalit vše Re: Přihlašování uživatelů do webové aplikace v PHP
    Thank you, I know this is old news, but it's good to see how far we have come! Carpet cleaners London

    Založit nové vláknoNahoru

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