Session gond Chrome-ban ezredszerre
Sziasztok!
A lenti kódot használom egy űrlap F5 elleni védelmére. Olyan módon, hogy a létrejött véletlenszerű kódot az űrlap egy hidden elemébe teszem, majd a form elküldése után összehasonlítom a kapott értéket a $_SESSION[f5_disable] értékével.
Ez minden böngészőben tökéletesen működik is, csak Chrome normál üzemmódjában nem, mivel ott látszólag egynél többször lefut a kód, ami miatt nyilván változik a session értéke. Chrome inkognító módban szintén rendben működik! Ötlet?
Nem használok Rewrite-ot, Redirect-et, van favicon.ico-m, a megjelenített oldal minden eleme 200-as, a session_start() az index.php-m legelején van, a chrome konzolja üres, hibátlan. Elfogytam az ötletekből. Köszi a segítséget, ha volna ötlet!
Az nem megoldás, hogy minden plugint kapcsoljak ki, mivel a látogatót sem kérhetem erre! :-) És nem szeretnék javascriptet sem használni erre a célra.
■ A lenti kódot használom egy űrlap F5 elleni védelmére. Olyan módon, hogy a létrejött véletlenszerű kódot az űrlap egy hidden elemébe teszem, majd a form elküldése után összehasonlítom a kapott értéket a $_SESSION[f5_disable] értékével.
Ez minden böngészőben tökéletesen működik is, csak Chrome normál üzemmódjában nem, mivel ott látszólag egynél többször lefut a kód, ami miatt nyilván változik a session értéke. Chrome inkognító módban szintén rendben működik! Ötlet?
Nem használok Rewrite-ot, Redirect-et, van favicon.ico-m, a megjelenített oldal minden eleme 200-as, a session_start() az index.php-m legelején van, a chrome konzolja üres, hibátlan. Elfogytam az ötletekből. Köszi a segítséget, ha volna ötlet!
Az nem megoldás, hogy minden plugint kapcsoljak ki, mivel a látogatót sem kérhetem erre! :-) És nem szeretnék javascriptet sem használni erre a célra.
function f5_generate(){
$chars="abcdefhjkmnpqrstuxy345789";
$str="";
for ($i=0;$i<6;$i++){
$rand=rand(0,strlen($chars)-1);
$str.=$chars[$rand];
}
$_SESSION[f5_disable]=$str;
}
Meg tudod nézni a forgalmat,
img
elemsrc
attribútumát. Elég ha megnézed a Network panelt a böngészőben, és látni fogod, milyen tartalmakat próbál betölteni.Minden 200, Ok
Betöltődik
index.php
mondjuk kétszer töltődik be.Elegáns?
2. Te feldolgozod: csinálsz az adatokkal valamit szerver oldalon.
3. Visszaküldesz egy választ: ez egy tetszőleges (HTML) tartalom, hogy ne üres semmit lásson a Júzer.
Tehát mi az újraküldés? Frissítés? Nem értem:
Sajnos nem tudom, hogy neked a Chrome mit csinál. Nemrég volt egy látogatói visszajelzésem, hogy (szintén Chrome-mal) bejelentkezés után "fehér semmi" van. Viszont bármit próbáltam az enyémen állítani, nem sikerült reprodukálnom a hibát (mondjuk infóm is kb csak ennyi volt, a saját beállításait sem tudta, nemhogy plugin-ek létét-állapotát). Nekem volt a mutatványban redirect is (úgy tűnt, hogy ezt nem hajtja végre), de más szituban (pl. komment post) rendesen működött neki is, csak login után nem. Gondolom ez semennyit sem segít...
...a 3. pontod után
Azt pedig nem jelenteném ki, hogy csak a 3. után léphet be a böngésző, mert a mai napig rengeteg ilyen php kódot látni pl:
Az elegáns alatt azt értettem, hogy van e jobb javaslat, ha szerver oldalon szeretném levédeni az űrlap utólagos újraküldését. Tehát nem egy egyszerű "választ" küldök a usernek, hanem a válaszba beiktatok egy header('Location: akarmi.php') átirányítást és ezzel kikényszerítem, hogy a böngésző ne kapja meg a POST/REQUEST értékeket.
Tehát amikor a böngészőnek átadom a html kódot ("Köszönöm, hogy kitöltötted az űrlapot!"), akkor már nem tud az űrlap adatairól. Tehát hiába nyomkodja a user az F5-öt.
Rosszul kérdezek?
Értem!
Én nem látok hibát, elvi ellentmondást a Location-ben és a redirect-ben sem (mint említettem: használom is). Persze utóbbinál megfelelő státuszkóddal.
A template-edben nincs semmi PHP? :) (nem kell válaszolnod)
nemhogy elegáns, de sokkal elegánsabb..
ez lesz a nyerő
Én ezt szerver oldalon oldom
ez is jó
a böngészők "lelkivilága"
Nem olvastam végig a válaszokat
- F5 elleni védelemre miért nem használsz PHP oldalon redirect-et? header("Location: formot_tartalmazo_oldal.php"); Szerintem tisztább és egyszerűbb
- $_SESSION[f5_disable]=$str; helyett $_SESSION["f5_disable"]=$str; ! Stringekről van szó a tömbök kulcsainál, macskakörmöket vagy aposztrófokat _kell_ használni
Általában igaz, hogy a
Egyébként keretrendszereknél ezt session.flash-nek hívják, amikor csak a következő oldal betöltéséig van bent egy érték sessionben, és utána vagy cserélődik, vagy törlődik.