Eli teen vieraskirjaa ja haluaisin siihen viestien välille odotusajan.
Eli siis kun lähetät viestin A voit lähettää viestin B vasta esim. 5 minuutin päästä.
Kokeilin seuraavaa:
session_cache_expire(5); $cache_expire = session_cache_expire(); session_start();
Ei toiminut, sessioni on ja pysyy.
Session ei ole itsessään ymmärtämäni mukaan kovin luotettava, koska se kuitenkin perustuu keksiin. Keksit pois->ei mitään aikoja.
Parempi tapa kirjoittaa vaikka filuun ip ja time(), ja tarkistella sieltä sitten. Tai tietokantaankin, riippuu mistä roikkuu.
Seuraava järjestelmä tuntuu toimivan ihan hyvin:
<?php if ($_COOKIE['odotus'] <> "") { echo "Sinun pitää vielä odottaa."; } else { echo "Toiminto suoritettu."; setcookie("odotus", "abc", time() + 5 * 60); } ?>
Viimeiset kymmenen vuotta evästeet ovat toimineet noin 99 prosentilla käyttäjistä.
Keksit ehkä toimii, mutta ne saa myös pois päältä! Tällöin ns. "pekka peruspeelo" pääsee spämmimään sinne viestejä ilman tuota 5min väliä.
No aloitin jo tekemään sillä tiedostojutulla niin menkööt.
Muuten toimii mutta se sekoo jos on kirjoittanu vaikka kello 23:00 ja sit seuraavana aamuna kun kello on 8:00 se sanoo että voit kirjoittaa vasta 23:05.
Mutta tämä on helposti korjattavissa.
Antti Laaksonen kirjoitti:
setcookie("odotus", "abc", time() + 5 * 60);
Eikös keksit ole käyttäjän kellon armoilla? Ja käyttäjien kellonajat helposti heittelee +-5min. Toimivampi tapa tuohon keksiversioon olisi varmaan asettaa keksi päiväksi tai pariksi ja tallentaa sen arvoksi se aikaleima, jolloin viimeisin viesti on kirjoitettu.
Ite kyllä olisin valinnut tuon keksiratkaisun, mistään kriittisestä toiminnosta ei kuitenkaan ole kyse ja jos oikeen pilkkua viilataan, niin pelkän ip-osoitteen tarkistaminen ei ole hyvä, koska useasti saman ip-osoitteen takana surffailee usempi (sata, tuhat, satatuhatta? - välityspalvelimesta rippuen) käyttäjää.
ajv kirjoitti:
Antti Laaksonen kirjoitti:
setcookie("odotus", "abc", time() + 5 * 60);
Eikös keksit ole käyttäjän kelllon armoilla? Ja käyttäjien kellonajat helposti heittelee +-5min. Toimivampi tapa tuohon keksiversioon olisi varmaan asettaa keksi päiväksi tai pariksi ja tallentaa sen arvoksi se aikaleima, jolloin viimeisin viesti on kirjoitettu.
Ainakin Win XP hakee ajan automaattisesti netistä, joten se turkin heittää juurikaan. Vaikuttaako muuten aikavyöhykkeet tohon, vai tarkistaako selain jotenkin koneen ja keksin aikavyöhykkeen? Nimittäin sillonhan jos se ei tuota tarkista niin aika isoja heittoja tulis esim englanninkielisillä sivuilla jossa käävis ihmisiä muistakin maista.
ajv kirjoitti:
pelkän ip-osoitteen tarkistaminen ei ole hyvä, koska useasti saman ip-osoitteen takana surffailee usempi (sata, tuhat, satatuhatta? - välityspalvelimesta rippuen) käyttäjää.
Jos sivusto ei ole yhtä suosittu kun Google, niin on aika epätodennäköistä, että 5 min sisällä sivulla käy kaks saman IP:n omaavaa.
lainaus:
No aloitin jo tekemään sillä tiedostojutulla niin menkööt.
Muuten toimii mutta se sekoo jos on kirjoittanu vaikka kello 23:00 ja sit seuraavana aamuna kun kello on 8:00 se sanoo että voit kirjoittaa vasta 23:05.
Mutta tämä on helposti korjattavissa.
Kokeileppa vaikka time():ä käyttäen. Siitä vaan vertaat jos nykyhetkinen aika ei ole 5*60(5 min sekunteina) enemmän kuin keksiin tallennettu niin ei saa kirjottaa viestiä.
ajv kirjoitti:
Antti Laaksonen kirjoitti:
setcookie("odotus", "abc", time() + 5 * 60);
Eikös keksit ole käyttäjän kelllon armoilla? Ja käyttäjien kellonajat helposti heittelee +-5min. Toimivampi tapa tuohon keksiversioon olisi varmaan asettaa keksi päiväksi tai pariksi ja tallentaa sen arvoksi se aikaleima, jolloin viimeisin viesti on kirjoitettu.
Olet oikeassa, eipä tuo minun koodini toimikaan kovin hyvin. Kokeilin vain koodia omalla koneellani, niin silloin se tietysti toimi hyvin, kun palvelimen kello ja käyttäjän kello olivat samat. Mutta ehdottamasi korjauksen avulla tästä ongelmasta pääsee eroon.
Tein nyt niin, että se tallentaa tiedostoon Ip -osoitteen, ajan ja päivämäärän.
Olisiko ip:n tilalta hostnamen tallentaminen järkevämpää?
Nyt siis toimii.
Ip:n tilalta vaikka jokin ip:n ja käyttöjärjestelmän + selainversion yhdistelmä tms. juurikin ajv:n mainitseman syyn vuoksi, mikäli siis et tuota keksiä aio käyttää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.