Zadejte hledaný výraz...

Přesměrování stránky po určité době

pr0gr4mm3r
verified
rating uzivatele
(4 hodnocení)
5. 7. 2010 19:25:35
Zdravím.
Řeším přihlašování v PHP a přemýšlím nad způsobem přesměrování po příhlášení. Prostě uživatel zadá údaje, a klikne na přihlásit. V tu chvíli server zkontroluje data, nastaví cookies.
Poté má správně dojít k přesměrování, aby se nebylo možné po odhlášení vrátit pomocí tlačítka zpět a znovu se tak přihlásit. Neumím to dobře popsat. Prostě pokud nedojde k přesměrování, tak budete prostě dál pracovat jako přihlášený uživatel, kliknete na tlačítko odhlásit, odhlásíte se, ale pokud se pomocí prohlížeče (tl. zpět) vrátíte na přihlašovací obrazovku, tak mohou být znovu odeslány POSTy a vy budete znovu přihlášení. To je riziko např. v internetových kavárnách, kdy třeba nezavřete okno a pouštíte dalšího uživatele.
Vlastně po kliknutí na Přihlásit se (správné přihlašovací údaje) se vám načte stránka, kde bude zpráva o úspěšném přihlášení. Z ní se bude přesměrovávat.
Přesměrování má nastat až např. po 2s, aby byl čas na přečtení zprávy o přihlášení.
Možnosti:
1)Header("Refresh: 2;www.web.cz/");
Tady je problém, že ve firefoxu stačí po refreshnutí zmáčknout F5 a už mi to nabízí znovuodeslání POST dat. Čili po použití refresh se nevymažou post data.
2)Header("Location: www.web.cz/");
Jak jde vidět, tady to nejde ničím zpozdit (pokud se neuchýlím k prasárnám jako sleep();).
3)Javascript
Nejčastější řešení. K tomu odkaz na cílovou stránku v případě nefunkčnosti.
Tady mě zajímají vaše upředňostňovaná řešení - hlavně kvůli tomu, aby si prohlížeč nemyslel, že je to přesměrování nějaké nekalé a nezablokoval to.
4)Meta
Nejjistější řešení. Ovšem musel bych se starat o to, aby to tam ten skript napsal, a já nemám ve zvyku dělat takový bordel v . Prostě nechci tam řešit nějakou funkci, která určí kdy a kam se to přesměruje.
5)Vaše řešení
Jak to řešíte vy? Co doporučujete?
Nyní se zamýšlím nad řešením č. 3 a 5.
Opět děkuji za Vaše názory.
5. 7. 2010 19:25:35
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524118
Tvé vysvětlení problému je trošku zmatečné, ale snad jsem to pochopil.
Po přihlášení (hned poté, co se např. nastaví sezení (cookies nebo session)) proveď přesměrování pomocí php fce Header() - tvoje varianta číslo 2 (btw. sleep by ti v tomto případě nepomohlo).
Myslím si, že zrovna u přihlášení člověk nepotřebuje vidět hlášku, že se úspěšně přihlásil. Ale je pravda, že jiných zpracování formulářů se to hodí, takže tady je nějaký návod:
Hlášku typu "Přihlášení proběhlo úspěšně", "Článek byl smazán", "Editace profilu proběhla úspěšně" můžeš ještě před přesměrováním uložit například jako sessions, po přesměrování na jinou stránku vytáhneš ze sessions hlášku, vypíšeš ji uživatelovi a sessions smažeš.
Příklad na přihlášení:
1) ověření přihlašovacích údajů
2) nastavení hlášky do sessions
3) nastavení přihlášovacích údajů uživatele (nějaký token)
3) Header("Location: xxxx")
A pak na v každém souboru uděláš toto:
1) zkopírování hlášky ze sessions do nějaké proměnné, třeba $message
2) smazání hlášky ze sessions (to proto, aby se hláška zobrazila jen jednou, hned po zpracování formuláře a následném redirectu)
.... Generování stránky
3) echo
$message
Dá se to použít na všechno možný, né jenom na přihlašování.
Pokud se nemýlím, tak toto používá snad každý framework, jen si nejsem jistý, jestli zrovna používají sessions. V Nette je to například "Flash message".
Doporučuju se naučit nějaký framework, je to oser psát tohle všechno sám (já na to přišel až po několika letech :-))
PS: Když už děláš s formuláři, nezapomeň na CSRF (viz Google).
5. 7. 2010 20:05:54
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524117
pr0gr4mm3r
verified
rating uzivatele
(4 hodnocení)
5. 7. 2010 20:15:48
Dobrá myšlenka.
Ale co když bude chronologie následující:
1)Stránka např. s editací osobních údajů
2)Uživatel klikne na uložit změny
3)Načte se nová stránka, na které nebude formulář, ale text (Změna proběhla úspěšně).
4)Počká se 2s, a přesměruje se třeba na úvod ovládacího panelu
Na to mi sessions nepomůžou.
5. 7. 2010 20:15:48
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524116
Právě takhle se to nemá dělat ;-)
Mělo by to vypadat takto:
1)Stránka např. s editací osobních údajů
2)Uživatel klikne na uložit změny
.... provedou se změny.... (to uživatel nevidí)
3)přesměruje se třeba na úvod ovládacího panelu
4)A na této stránce se zobrazí hláška
Ta hláška bývá většinou dobře zvýrazněná (div s barevným rámečkem a pozadím, popřípadě i s ikonkou), aby jí uživatel nepřehlédnul.
---
Třeba u Gmailu... napíšeš mail, odešleš formulář, odesílá se, ... přesměruje se na hlavní stránku (inbox) a nahoře je hláška "Vaše zpráva byla odeslána".
5. 7. 2010 20:23:30
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524115
pr0gr4mm3r
verified
rating uzivatele
(4 hodnocení)
5. 7. 2010 21:35:58
Takový systém je samozřejmě hezký, uznávám ho.
Jak ale přesvědčím paličatého zákazníka?
To čerpáš z nějakého "standardu" ve kterém je to napsané. Můžeš mi prosím uvést zde odkaz na takovou stránku, kde je daná chronologie uznávaná před mou starou chronologií?
Prosím, neberto jako shazování tvého návrhu. Chci jen něco, co můžu ukázat zákazníkovi a říct mu: "Toto je všeobecně uznávaný postup"
5. 7. 2010 21:35:58
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524114
Jiří Šubr
verified
rating uzivatele
(23 hodnocení)
5. 7. 2010 22:16:17
Normálně přesmerovat javascriptem. Nastává zde otázka, co když uživatel nemá povolený javascript (takových je asi tak 0.001%), pak dávám na stránky oveření, jestli má uživatel javascript zaplý, pokud ne, ta kse na stránky ani nedostane.
5. 7. 2010 22:16:17
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524113
pr0gr4mm3r
verified
rating uzivatele
(4 hodnocení)
5. 7. 2010 22:18:02
Pokud nemá zaplý javascript tak tam bude doakz na cílovou stránku, který bude uživatelům s funkčním javascriptem skrytý (právě pomocí javascriptu).
Bohužel, lidí s vyplým javascriptem je kolem 5% (viz. http://www.w3schools.com/browsers/browsers_stats.asp)
5. 7. 2010 22:18:02
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524112
Napsal Lighter;533740
Normálně přesmerovat javascriptem.
Ale to neřeší problém, že se data z formuláře mohou odeslat znovu.
Post/Redirect/Get
6. 7. 2010 00:26:43
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524111
ja to resim takhle:
chovani je vicemene jasne - dojde k presmerovani na predchozi stranu - je to klasicky redirect after post...
(ikdyz ten muj teda umi i nejaky dalsi kouzla, ale to neni dulezite)
tady mas jednoduchou implementaci tohoto principu (je to to same jako psal mazlik, jenom se tomu rika jinak)
http://www.thefutureoftheweb.com/blog/get-redirect-after-post
6. 7. 2010 09:51:28
https://webtrh.cz/diskuse/presmerovani-stranky-po-urcite-dobe/#reply524110
Pro odpověď se přihlašte.
Přihlásit