C-C-Combo breaker
Mivel JonC csütörtökön ismét eltörte a blogmotort, nem maradt más választásom, mint hogy előálljak a megoldással a véletlen hozzászólás-duplikátumok keletkezésének problémájára.
A probléma ugyebár annyi, hogy ha írsz egy hozzászólást a blogra és utána újratöltöd az oldalt, akkor a böngésződ az űrlap tartalmát megleli a cache-ben, a ténylegesen beírt dolgok mellett azt is, hogy meg lett nyomva a küldés gomb, és ennek megfelelően ismét odaadja az adatokat a blogmotornak, az meg a szokásos módon végrehajtja a komment rögzítését, mert neki ez a dolga, és máris ott figyel a bejegyzés alatt ugyanaz a hozzászólás kétszer, ötször, tízszer.
Ez több szempontból sem nevezhető jónak. Egyrészt ezeket nekem kell törölgetnem, másrészt néha felborul miattuk a kommentek sorrendje (amit perpillanat nagyon nem értek; egyazon rendezett lekérdezésre az adatbáziskezelőből jó eredmény jön ki, de PHP-val történő kilistázáskor felcserélődnek a rekordok), harmadrészt pedig ennek egyszerűen nem így kellene működnie.
A megoldást abban láttam, hogy az űrlapot és az őt megjelenítő oldalt valahogyan összekössem, pontosabban elérjem azt, hogy a konkrét oldal el tudja dönteni, hogy hozzá tartoznak-e a cache-ben lévő űrlapadatok. Ehhez szükség van egy session változóra és az űrlapot ki kellett egészítenem egy rejtett típusú mezővel. Először generálok egy azonosítót (ami egy MD5-tel kódolt véletlenszám), ezt adom értékül a session változónak és a rejtett mezőnek is minden egyes oldalbetöltés során. Ha megtörténik az űrlap elküldése, a komment rögzítését végző alprogram ellenőrzi, hogy az űrlap rejtett mezőjének értéke és a session változó értéke megyegyezik-e. Ha megyegyeznek, akkor elmenti a hozzászólást és visszatérünk a bejegyzéshez, egyébként viszont zero fucks are given. Ismét megjelenik az oldal, a változónk kap egy új értéket, akárcsak az űrlap rejtett mezője.
Amikor ugyanis a hozzászólás küldése után megnyomod az F5-öt (és leokézod a figyelmeztetést), a szkript újra leellenőrzi a két érték egyezését, csakhogy a session változó értéke azóta megváltozott, a rejtett mező értékét viszont továbbra is a cache-ből szedi a böngésző, amik így nyilván nem fognak egyezni, azaz a komment egy duplikátum, tehát eldobható.
Az egésznek tehát az a lényege, hogy ezentúl mindenki pontosan annyi hozzászólást fog beküldeni a blogra, ahányszor megnyomja az űrlap végén a gombot. Tiszta Amerika!
Nfol @
Talán nem kell mondanom, hogy ennél a posztnál kellene próbálkoznotok kijátszani a rendszert, hátha mégsem annyira jó, mint hittem. Köszi.
JonC @
Azért rám fogni mindent nagyon csúnya dolog, én csak naiv módon mindenféle hátsó szándék nélkül kommentelni szerettem volna :) Na de majd most jól agyonpüfölöm az F5-öt, lássuk mi történik!
EdBoyWW @
Jól gondolom, hogy ezzel a probléma valódi okára nem jöttél rá? Összedrótozós mukoggya-valahogy megoldásnak viszont nem rossz :)
EdBoyWW @
(Mukod)
Nfol @
@JonC: Azért kenem rád, mert a közreműködésed nélkül valószínűleg soha nem lett volna kijavítva a hiba.
@EdBoyWW: Hogy a böngészők így működnek, az nem bug, hanem feature, ami bizonyos esetekben káros mellékhatással bír. Erre nekem, a fejlesztőnek kellett volna felkészítenem a blogmotort már az elején, de csak mostanra érte el az ingerküszöbömet a jelenség.
Tákolás, mert utólag kellett belenyúlnom a kódba, de ha eredetileg is figyelembe veszem a problémát, akkor sem oldottam volna meg másképp, mint most. Talán más paraméterek alapján menne az ellenőrzés, de mindegyik gazdaságtalanabb ennél.
SztupY @
Húdejóbonyolultanoldottadmeg.
Kakukk @
@JonC: Nálam is előfordult már ez a probléma.
JonC @
@Kakukk: az lehet, de én legalább rá tudom fogni a Disqus-ra :) csúnya Disqus, ejnye!
@nfol: vágom én, műhiszti volt :)
bachterman @
wp alatt figyeli a sessid-t, és ugyanattól a júzertől nem enged adott időn belül mégegy (mégszáz) kommentet. fékezett habzású kommentcunami. sztem ez elegánsabb, és flame-biztosabb.
de a tiéd még mindig jobb, mint a bloghu 30 perces kussoltató vágányra pakolása, nehogy saját magad alá kommenteljél. pff.
Zsubi @
Hát én sosem nyomok kommentelés után F5-öt, meg sűrűn nem is kommentelek, amióta megszaporodtak az olyan bejegyzések, amelyekből csak a névelőket és a kötőszavak értem. De örülök, hogy ettől is szebb lett a világunk! :)
JonC @
azért azt csak meg kell jegyeznem, hogy a magyar nyelv értelmezésével hadilábon állok néha. gondolom néha előtör belőlem a funkcionális analfabéta.
Nfol @
@bachterman: A flame-elés problémájával majd akkor foglalkozok, ha indokolt lesz, szerencsére errefelé nem jellemző. Amíg mindenki normálisan viselkedik, addig nem fogom senkinek megkötni a kezét.
@Zsubi: Javasolhatsz témákat, például. :)
@JonC: Az jó, de én meg most ezt nem értem.