Autor Zpráva
quatzael
Profil
Jak přesně na to? Koukal jsem na obrázek tady a úplně moc nerozumím co tam znamená to 3xx Redirect..

Já bych to chápal například tak, že tu stránku po uložení do databáze několikrát (3x) přesměruju až k té výsledné stránce. Ale nerozumím proč tam musí být pak ta metoda GET.

Navíc nevím jak se to chová při tom přesměrování, ale když budu klikat zběsile na tlačítko zpět je možný že bych se i přes to přesměrovávání proklikal zpět na stránku, kde se informace odesílají do databáze??
Zechy
Profil
Zřejmě obědvě x budou "proměnné", protože předpokládaj, že si tam doplníš číslo pro 3xx Redirect - čili třeba 301 Moved Permanently. To samý je i 2xx, tam se zas doplnují kody 2xx Success.
quatzael
Profil
Zechy:
No furt to nechápu. Vůbec nerozumím tomu kam to číslo mám zapsat nebo odeslat.. Vůbec nic..
juriad
Profil
Prohlížeč si nikdy do historie neuloží adresu stránky, jejíž zavolání skončí kódem 3xx (1). Vždy si uloží až stránku na kterou byl přesměrován.
Proto se ti nikdy nepodaří refreshem ani zběsilým klikáním zpět znovu odeslat stránku, která skončila přesměrováním - taková stránka nikdy v historii prohlížeče nebyla.
Toho se využívá v případech, že chceš vynutit jednorázovou akci (odešli objednávku), nesmí se stát, že by se odeslala dvakrát.

Pokud prohlížeč dostane jako odpověď přesměrování pošle nový dotaz na stránku, kam byl přesměrovaný.

(1) Autoři protokolu http byli tak chytří, že skutečně záleží jen na první číslici. Všechny kódy začínající dvojkou znamenají úspěch, kódy začínající trojkou jsou přesměrování.

To číslo zadáš funkci header, PHP (Apache) ve většině případů vloží vhodné číslo sám.
Zkus si s tím pohrát.
Vytvoř si stránku presmeruj.php s obsahem:
<?php
header("Location: index.php", true, 342);

A pak si v prohlížeči zapni nástroje pro vývojáře a sleduj provoz po síti v okamžiku, kdy zadáš adresu presmeruj.php .
quatzael
Profil
juriad:
A jde nějak zařídit, aby se z tý původní stránky přes to přesměrování ještě přeposlaly i hodnoty z proměnných, který jsem tam měl poslaný metodou POST? Nejlépe zase metodou POST, aby zůstaly ve formátu $_POST..
juriad
Profil
Ne. Proměnné si ulož na serveru do SESSION.
quatzael
Profil
juriad:
ta 342 mi ale nefunguje..
Když tam dám 301, tak to přesměruje na tu další stránku a při kliknutí na tlačítko zpět se to vrací na předchozí, takže to stránku ve který mám ten kód s tím header() to přeskočí..
Já bych ale potřeboval nejlíp, aby to vůbec nešlo vracet ani nikam zpátky před tou stránkou.. Jde to nějak??
juriad
Profil
Ta 342 by měla fungovat, ale bohužel jinak, než je očekávané.
HTTP status codes are extensible. HTTP applications are not required
to understand the meaning of all registered status codes, though such
understanding is obviously desirable. However, applications MUST
understand the class of any status code, as indicated by the first
digit, and treat any unrecognized response as being equivalent to the
x00 status code of that class, with the exception that an
unrecognized response MUST NOT be cached. For example, if an
unrecognized status code of 431 is received by the client, it can
safely assume that there was something wrong with its request and
treat the response as if it had received a 400 status code. In such
cases, user agents SHOULD present to the user the entity returned
with the response, since that entity is likely to include human-
readable information which will explain the unusual status.

http://tools.ietf.org/html/rfc2616#page-39
Prohlížeč se musí chovat jako kdyby dostal kód 300, u kterého není presně určeno, jak má klient zareagovat:
http://tools.ietf.org/html/rfc2616#section-10.3.1 - popsané chování a význam kódu 300
http://greenbytes.de/tech/tc/httpredirects/ - většina prohlížečů normě vyhovuje

Když tam dám 301, tak to přesměruje na tu další stránku a při kliknutí na tlačítko zpět se to vrací na předchozí, takže to stránku ve který mám ten kód s tím header() to přeskočí..
Ano, přesně tak.

Já bych ale potřeboval nejlíp, aby to vůbec nešlo vracet ani nikam zpátky před tou stránkou.. Jde to nějak??
Pokud je stránka v prohlížečové cachi, tak s tím neuděláš nic (pokud si nechceš dost pohrát s JS).
Pokud se odešle request na server na stránku, která by už neměla být dostupná (třeba předchozí stránka objednávkového formuláře po provedení objednávky), tak prostě pošli ze serveru kód 410: http://tools.ietf.org/html/rfc2616#page-68 a zároveň obsah třeba úvodní stránky.
Hlavičkou řekneš, tato stránka neexistuje a že je to záměr; a obsahem stránky nabídneš uživateli, kam může pokračovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: