Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Odotusaika viestien välillä

Sivun loppuun

Quirzo [14.08.2007 19:03:45]

#

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.

Dramo [14.08.2007 20:44:43]

#

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.

Antti Laaksonen [14.08.2007 23:50:32]

#

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ä.

punppis [15.08.2007 15:24:19]

#

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ä.

Quirzo [16.08.2007 08:27:08]

#

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.

ajv [16.08.2007 08:37:05]

#

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ää.

Matso [16.08.2007 10:08:36]

#

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ä.

Antti Laaksonen [16.08.2007 11:28:26]

#

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.

Quirzo [16.08.2007 20:28:52]

#

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.

Olga [16.08.2007 20:54:59]

#

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ää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta