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í
×
    dnes 22:44 | IT novinky

    IBM kupuje společnost HashiCorp za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 0
    dnes 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    dnes 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Nová verze

    Byla vydána nová verze 6.2 ž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. Tor Browser byl povýšen na verzi 13.0.14.

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

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 1
    dnes 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    včera 23:22 | IT novinky

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 6
    včera 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 21
    včera 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 29
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 720 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Doporučte vhodné řešení v PHP

    4.9.2012 20:52 MAN
    Doporučte vhodné řešení v PHP
    Přečteno: 777×
    Zdravím, chtěl bych se zeptat zdejších zdatných programátorů, jestli by mi neporadili jak řešit takovou situaci v php. Mám nějakou stránku /registration, na této stránce mám formulář pro novou registraci, po odeslání se zpracují případné chyby a pokud je vše v pořádku form se odešle. Teď se chci zeptat jak dál pokračovat. Má se stránka přesměrovat na nějakou jinou? Má se zůstat na původní stránce? Narážím na to, že s každé stránky se lze vrátit v prohlížeči zpět a tudíž user může znova form odeslat, což se mi nelíbí, a to i za situace, že jsem ihned všechny $_POST unsetoval. Header taky nic moc neřeší, jelikož třeba opera dokáže opět vrátit předchozí stránku. Pokud se někdo podělí, budu rád. Děkuji

    Odpovědi

    5.9.2012 06:26 Kit
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Ano, po každém zpracování požadavku POST je dobré stránku ihned přesměrovat. Nejlépe na sebe samu. Je zbytečné generovat výstup, stačí jen poslat header() a hned exit().
    5.9.2012 08:51 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Pomocí header() přesměrovat je dobrý krok (jak psal Kit třeba i na sebe samu).
    Zabránit opětovnému odeslání lze jednoduše takto:
    Při generování formuláře vygenerovat „ticket“ (něco jako md5(time() . $salt));), tento „ticket“ si uložit na serveru (třeba jako session proměnnou) a současne ji dát do hidden input-u.
    Po odeslání jako první na straně serveru kontrolovat jestli „ticket“ ve formuláři je totožný s tím v uloženým na serveru (session proměnné, zde je první potřeba ověřit existenci a pak srovnat), jako druhý krok (nezapomenout!) smazat „ticket“ ze serveru (odstranit session proměnnou).
    No a pak přesměrovat pomocí header() na OK nebo i Chyba stránku.
    Takto můžete jednoduše i informovat uživatele, že to odesílá znovu a pod., ale také můžete hidden input změnit za text input a vygenerovat obrázek „captcha“ (nebo dočasně jen text) k opsání.

    Také můžete zaměnit odstranit session proměnnou za pomocí jiné proměnné (její exitence nebo pravdivostní hodnoty) mít informaci, že TENTO formulář (podle ticket-u) již byl odeslán. (Při opětovném vstupu na stránu s formulářem se tato informace ztratí, protože vygeneruje druhý ticket)

    PS: Obecně unset-ovat něco z $_POST nemá obvykle význam, a ve vašem případě vůbec žádný, tyto proměnné jsou vytvořeny z uživatelem odeslaných dat a existují jen po dobu běhu skriptu (při opětovném odeslání jsou samozřejmě opět vytvořeny).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    5.9.2012 13:43 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    pošli registraci ajaxem, odpověď ze serveru pak bude buď chybová hláška, nebo url na kterou se má pokračovat

    oproti Šangalovo řešení s ticketama je to IMHO implementačně jednodušší, ale jen do tý doby, než se budeš pokoušet ošetřit i lidi co maj vypnutej javascript
    Jendа avatar 5.9.2012 17:22 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    pošli registraci ajaxem
    Aneb jak zavést JavaScript tam, kde HTML nabízí už 15 let jednoduché řešení.
    odpověď ze serveru pak bude buď chybová hláška, nebo url na kterou se má pokračovat
    No ale k tomu není potřeba Ajax, stačí normálně odeslat formulář a server vrátí buď chybu nebo redirect.

    Šangala podle mě JS nepotřebuje.

    Jinak pokud by to autor nepsal v čistém PHP, ale použil nějaký framework (pro začátek alespoň Nette Forms), tak si ušetří dost času s ověřováním, generováním chybových hlášek, vracením formuláře atd.
    6.9.2012 13:41 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    to jednoduchý řešení tazateli ale nevyhovuje, jestli nejsem úplně mimo, tak prohlížeč i když dostal redirect stejně na zmáčknutí tlačítka zpět bude chtít postovat informace znovu

    takže jestli si ještě nerozumíme - nevim o tom, že by se prohlížeč libovolným způsobem pokoušel postnout data který šly ajaxem
    6.9.2012 08:48 George O.
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Ajax je docela nebezpecna dvousecna zbran. Nedokazu si predstavit, co je praktickeho na pouziti ajaxu prave na registraci. Ajax se hodi mozna na nejake chaty a jine widgety, kde neni zivotne dulezity pristup indexacnich robotu, ale jinak to zavani ubitim serveru :-)
    6.9.2012 13:47 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    co je praktickeho na pouziti ajaxu prave na registraci

    třeba že to řeší tazatelovo problém?

    zavani ubitim serveru

    ubitím serveru pak ale zavání nasazení čehokoliv na ten server ;)
    6.9.2012 19:40 George O.
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Tazateluv problem resi redirect sam na sebe nebo na jinou stranku po zpracovani requestu, jak je tomu u vsech webovych aplikaci napsanymi profesionaly :-)

    A jinak ubiti normalnim http requestem neni tak realne, protoze si drzi po nejakou dobu aktivni connection (keep-Alive), narozdil od ajaxu, kdy se pri kazdem requestu vytvari spojeni nove a je tam tim padem mnohem vetsi potencial k ubiti serveru :-)
    7.9.2012 11:09 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Tazateluv problem resi redirect sam na sebe nebo na jinou stranku po zpracovani requestu, jak je tomu u vsech webovych aplikaci napsanymi profesionaly

    talk is cheap, show me the code

    pomocí header() se mi problém s tlačítkem zpět vyřešit nepodařilo, firefox se sice brání, ale nakonec ty data klidně postne znova; rád se přiučim (bez ironie)

    ad keep-alive - nad tim sem nepřemejšlel, ale dle prvních pár hitů v googlu nemluvíš pravdu, ono by od výrobců prohlížečů bylo dost hloupý nerecyklovat spojení v případě ajaxu
    7.9.2012 12:14 George O.
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Tak ciste logicky, pokud mas registraci a chces znovu odeslat post data, pak ti stejne pokus o registraci selze, protoze dany user s loginID uz v databazi je... Jinak bohate staci do header() pridat code 303: header('Location: nekam', true, 303);

    A jinak k tomu connection, nejde o to, co si drzi prohlizec, ale co drzi web server. Server uzavre asynchronni connection hned po odeslani Ajax response. Takze posles treba ajax 5 pozadavku (napr. v praxi suggestion) a muzou se ti vratit response v jinem poradi, protoze nejdou ve fronte, ale pro kazdy ajax request se otevre nove spojeni ;-)
    7.9.2012 13:28 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Tak ciste logicky, pokud mas registraci ....

    selhat může a nemusí, už sme to řešili o kus níž http://www.abclinuxu.cz/poradna/programovani/show/365331#6

    Jinak bohate staci ...

    nestačí, muj prohlížeč se chová furt stejně blbě

    k tomu zbytku - zní to docela rozumně, ale nevěřim že se takhle chovají všechny kombinace prohlížeč vs. webserver; kromě toho IMHO webserver nic nedrží, webserver dostává hlavičky z klienta a ten mu může nabullshitit cokoliv
    6.9.2012 11:37 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Tím se problém jen skryje, ne odstraní.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2012 13:44 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    to nechápu, pokud je uživatel opravdu schonej zmáčknout odesílací čudlík formuláře dvakrát, tak to nepovažuju za problém aplikace
    6.9.2012 14:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    Vyřeší to to, že běžný uživatel v běžném prohlížeči neprovede dvojí odeslání stiskem tlačítka zpět, ale odeslat stejný formulář vícekrát stále lze, tedy to problém neřeší jen skrývá.
    pokud je uživatel opravdu schonej zmáčknout odesílací čudlík formuláře dvakrát, tak to nepovažuju za problém aplikace
    pokud toto aplikace nezpracuje korektně, tak to jednoznačně problém aplikace je.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2012 15:57 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    jo takhle, jasný, v případě registrace (snad oprávněně) předpokládam, že uživatel dodal nějakej identifikátor, takže pokud to opravdu pošle dvakrát, tak ho (obvykle) server pošle do někam, že takovej identifikátor už existuje

    na druhou stranu když uživatel dá zpět, pozmění identifikátor, odešle, tak v mým řešení se zaregistuje podruhý s různejma údajema, v tvým řešení bude čučet jak puk co že se to stalo (a pak si přečte chybovou hlášku a odnaviguje se jinak)
    6.9.2012 18:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    bude čučet jak puk co že se to stalo (a pak si přečte chybovou hlášku a odnaviguje se jinak)
    Ano bude pukem. Otázkou je jestli to je nebo není žádané. V kombinaci s přesměrováním, je kladena překážka na to dát „zpět“, takže je naznačeno „tudy ne“ a pokud se dozví „si puk, bo jsi neposlechl“ není nic špatného. Pokud je vhodné opakovaně zadávat, tak je daleko snazší, na stránce potvrzení, nabídnou “zadat další“.
    Jinak je jasné, že pokud existuje jednoznačný identifikátor a je vhodné/možné ho tak použít (tedy i je povolené informovat o jeho existenci) tak je to snazší. Ale spousta formulářů i registračních takový identifikátor nemá.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    7.9.2012 11:10 jos
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    souhlas v plným rozsahu
    7.9.2012 12:16 George O.
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    IMHO resite blbosti, pridanim 303 code do funkce header() se problem resi.
    Josef Kufner avatar 9.9.2012 00:28 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Doporučte vhodné řešení v PHP
    To, co hledáš, se nazývá Redirect After Post. Jednoduše řečeno, po úspěšném zpracování Post požadavku pomocí header() řekneš prohlížeči, ať udělá Get (který pak bude mít prohlížeč v historii).

    Druhou věcí, kterou chceš, je obrana proti útoku Cross-site request forgery. To spočívá ve vytvoření náhodného tokenu při předání formuláře uživateli, a jeho následném zneplatnění po zpracování formuláře. Každá instance formuláře je tedy použitelná nanejvýš jednou. Tím se vyřeší i obrana proti double clicku na odesílací tlačítko formuláře na nepříliš svižném připojení. Vhodné chování v případě neplatného tokenu je opětovné zobrazení formuláře stejně, jako by uživatel nevyplnil povinné pole.

    Dále si pak přečti něco o REST, pomůže ti to s designem aplikace.
    Hello world ! Segmentation fault (core dumped)

    Založit nové vláknoNahoru

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

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