27. april 2007 - 11:01Der er
6 kommentarer og 1 løsning
Vente x antal minutter efter formpost af mail
Hej eksperter,
jeg har en pris-service hvor man kan lave en forespørgsmål på en pris af mur- og tagsten. Man indtaster navn, adresse osv. samt en bestemt varegruppe og sender den til en forhandler for en prisforespørgsmål. Problemet er at nogle personer sender den samme forespørgsel til flere forhandlere og det skal ikke kunne lade sig gøre - det kræver nogle ressourcer at lave et tilbud, så det er ikke optimalt at der sidder 7-8 forhandlere og laver et tilbud på den samme forespørgsel.
Jeg har så tænkt på at lave en begrænsning der gør at når man f.eks. har sendt til 2 forhandlere så er man nødt til at vente x antal minutter før man kan sende igen. Hvordan kan det laves? Det skal nok laves med noget sessions der gemmer IP'en.
enten kan du jo sætte en cookie eller en session, som kan indeholde antallet af gange man har sendt en forespørgsel. Dvs. at du jo så kan søge på om $_SESSION >= 2 (max antal gange)
Din session eller cookie kan jo være et array, som indeholder 2 keys - en som indeholder antal gange sendt og en med sidste tidspunkt for afsendelse. (En cookie kan ikke være et array, men du kan jo lave det som en string adskilt med semilolon og så explode den når du henter den)
Det lyder ret simpelt... jeg tænkte også på at oprette en tabel i databasen med ID, IP, tid og forsøg og når en bruger så sender første gang smider den de informationer i databasen.. sender han så igen opdaterer den forsøg med 1 og vil han så prøve igen inden for kort tid nægter den... Når der så er gået x antal minutter, sletter den brugeren i databasen og han kan sende 2 gange igen....
Der er jo flere måder at lave det på - du kan jo både lave det serverbaseret og klientbaseret.
Det du skal tænke på hvis du laver det serverbaseret er om brugeren er logget ind, inden han kan sende noget - for det kan jo være lidt riski hvis ikke og du tjekker på ip-adresser. Ikke alle har jo statisk ip eller hvis 2 personer, der vil det samme sidder på samme netværk.
Laver du det klient baseret, så er du jo sikker på at det er den samme person...
if(!$brugerIP == $_SESSION["usIP"]) { mysql_query("INSERT INTO maxmails (userIP, tid, tries) VALUES ('$brugerIP', NOW(), '1')")or die(mysql_error()); print "Bruger tilføjet"; } else { if($_SESSION["tries"] == 2) { print "Du kan kun sende 2 forespørgsler ad gangen - Du må vente 15 minutter før du kan foretage en ny forespørgsel"; } else { mysql_query("UPDATE maxmails SET tid = NOW(), tries = '2' WHERE userIP = '$brugerIP'")or die(mysql_error()); print "Bruger opdateret"; } }
(IKKE OPTIMERET)
hvordan kan jeg nu tjekke efter alder på en session? at når der er gået 15 min. så sletter den indhold i databasen hvor tiden til det specifikke IP nummer er +15 min. Altså han sendte kl. 11:30 og kl 11:45 skal indholdet i DB'en med ham tømmes.
Det regner du da bare ud ved at trække seneste gemte tid i databasen fra tiden nu og så kan du jo slette det i databasem hvis du ønsker det - MEN på mange servere holder en session ikke længere end 7-8 minutter hvis ikke man foretager sig noget aktivt i mellemtiden - det skal du først og fremmest have styr på, for ellers duer det jo ikke med en session
Jeg er lidt i tvivl om hvilket format tiden skal stå i for at kunne udregne minutter? Det er heller ikke noget problem at sætte den til 7-8 minutter...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.