Gå til innhold

Tidsbegrensing av mail sending fra 1 IP


Anbefalte innlegg

Bruker koden under på siden min, og er veldig for nøyd med den.

Men så er det noen som koser seg ved å trykke "tilbake" "send" mange ganger...

Når jeg logga på mailen i sta, så var det over 200 mailer med innholdet "sfdgh" i innboksen min...

 

Kan noen legge til en kode som enten blokker ip adressen i 1 time, eller viser en feilmelding i 1 time.

 

<?php

if ($_POST['submit'] == TRUE) {
$receiverMail = "[email protected]";
$subject    = "Lefsaker`s nett";
$name  = stripslashes(strip_tags($_POST['name']));
$email  = stripslashes(strip_tags($_POST['email']));
$msg  = stripslashes(strip_tags($_POST['msg']));
$ip  	= $_SERVER['REMOTE_ADDR'];
$msgformat	= "Kjære Mr. Kasper Lefsaker.\nDu har mottat en e-mail fra din nettside, Lefsaker`s nett.\nDen er som følger\n\n\nFra: $name    \nIP: $ip \nE-mail adresse: $email\n\nMelding:\n\n$msg";

if(empty($name) || empty($email) || empty($msg)) {
 echo "<h2>Meldingen er ikke sendt</h2><p>Vennligst fyll ut alle de nødvendige feltene</p>";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
 echo "<h2>Meldingen er ikke sendt</h2><p>E-mail adressen er ugyldig</p>";
}
elseif(mail($receiverMail, $subject, $msgformat, "From: $name <$email>")) {
 echo "<h2>Meldingen er sendt!</h2><p>Jeg vil komme tilbake til deg så fort som mulig.</p>"; }
else {
 echo "<h2>Meldingen er ikke sendt</h2><p>Vennligst prøv igjen... Hvis problemet oppstår igjen, er det nok noe galt med serveren.</p>";
}
}
else { ?>
<form method="post" action="">
<p>
<label for="name">Navn:</label><br />
<input id="name" name="name" type="text" size="30" maxlength="40" /><br />

<label for="email">E-mail</label><br />
<input id="email" name="email" type="text" size="30" maxlength="40" /><br />

<label for="message">Melding</label><br />
<textarea id="message" name="msg" cols="50" rows="6"></textarea><br />

<label for="submit"></label>
<input id="submit" class="button" type="submit" name="submit" value="Send" />
</p>
</form>
<?php } ?>

kanskje noen dumme setninger i koden da :!: men den er jo til meg :!:

Lenke til kommentar
Videoannonse
Annonse

Hehe.

 

Vil anbefale session. Da må brukeren lukke nettleseren for å få sendt en ny mail.

 

Noe sånt som dette i fila hvor mailen blir sendt:

 

session_start();

if($_SESSION['mail'] == 1) {
  print("Du kan ikke sende flere mail");
} else {
   mail(mail ting...);
   $_SESSION['mail'] = 1;
}

 

Noe i den duren bør funke.

 

Anbefaler deg å lese litt i manualen om session eller google litt..

Lenke til kommentar
står 1 tallet for 1 time?

6986629[/snapback]

Nei. Valgte bare en verdi for sessionet.. Man må lukke nettleseren for at sessionet skal ta slutt. (Evt. kan du slette det)

Men hvis du ønsker å holde folk borte i en time, er det vel like greit å si at de bare får sende en mail mens de har nettleseren oppe?

 

Tviler på at så mange gidder å åpne og lukke nettleseren for å plage deg...

Lenke til kommentar
hmm... fikk det ikke helt til, bare så man ikke kan sende i det hele tatt.

 

Kan du sette den inn i min eksisterende kode?

6986723[/snapback]

Bare legg til en egen elseif($_SESSION['mail'] == 1) {

der du sjekker om feltene er riktig.

Så legger du inn $_SESSION['mail'] = 1 etter at du kaller mail()

Så legger du til session_start(); øverst på siden.

 

Dersom du ikke får sendt mail i det hele tatt, bør du prøve å lukke nettlesren helt før du prøver igjen..

Lenke til kommentar
Trur jeg plasserer det feil...  får bare opp error meldinger.

Plz legg den til koden min oppi der :love:

6986781[/snapback]

Huff! Lærer av å prøve og prøve. Lag deg en ny fil og finn litt ut av session...

Men ok.

 

if(empty($name) || empty($email) || empty($msg)) {
echo "<h2>Meldingen er ikke sendt</h2><p>Vennligst fyll ut alle de nødvendige feltene</p>";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "<h2>Meldingen er ikke sendt</h2><p>E-mail adressen er ugyldig</p>";
}elseif($_SESSION['mail'] == 1) {
    print("Du kan ikke sende flere mail!");
}
elseif(mail($receiverMail, $subject, $msgformat, "From: $name <$email>")) {
     echo "<h2>Meldingen er sendt!</h2><p>Jeg vil komme tilbake til deg så    fort som mulig.</p>";
  $_SESSION['mail'] = 1; 
}
else {
echo "<h2>Meldingen er ikke sendt</h2><p>Vennligst prøv igjen... Hvis problemet oppstår igjen, er det nok noe galt med serveren.</p>";
}
}
else { ?>
<form method="post" action="">

 

Tror det blir sånn, men har ikke testet noe. Husk å skrive session_start(); øverst i fila..

Endret av EirikO
Lenke til kommentar

Men vil ikke noen som har cookies/sessions avslått i nettleseren kunne gå forbi dette, og fremdeles spamme så mye de vil? En kan jo lett mekke et script som kjører masse POST-forespørsler som da vil sende masse mailer uten å ta imot sessionen. Hvordan kan en best tidslåse hendelser uten at en kan omgå dem ved å ha en uvanlig/custom user agent?

Lenke til kommentar

Man kan ikke blokkere sessions, de er serverbaserte. Det eneste som _eventuelt_ lagres på brukerens maskin er en sessionID, men denne kan sendes på mange måter.

 

Dette er uansett ikke noen god løsning. En god løsning er å logge ip til en flatfil eller database, og bruke denne for å sette begrensninger.

Lenke til kommentar
Man kan ikke blokkere sessions, de er serverbaserte. Det eneste som _eventuelt_ lagres på brukerens maskin er en sessionID, men denne kan sendes på mange måter.

6999247[/snapback]

Session kan da i aller høyeste grad blokkeres. Greit nok, det blir lagra på server, men så lenge klient ikke godtar cookie er den verdiløs i denne sammenhengen.
Dette er uansett ikke noen god løsning. En god løsning er å logge ip til en flatfil eller database, og bruke denne for å sette begrensninger.

6999247[/snapback]

:yes:
Lenke til kommentar
Dette er uansett ikke noen god løsning. En god løsning er å logge ip til en flatfil eller database, og bruke denne for å sette begrensninger.

6999247[/snapback]

:yes:

6999485[/snapback]

 

Bah, hadde dette som en mulighet, men håpet på at det ville være en måte å gjøre dette på uten å måtte kjøre enda en spørring mot databasen... :(

Lenke til kommentar
Ikke bare en med to faktisk (SELECT og DELETE) ... Ingen fordel å la ting ligge evig i en tabell heller ;)

7000263[/snapback]

 

Bruk en HEAP, så forsvinner vel ting etterhvert?

 

Men det bør da være mulig å kjøre en session-basert løsning for dem med sessions tilgjengelig (over 99 prosent, antar jeg), og heller bruke SQL-løsningen for alle andre tilfeller?

Lenke til kommentar
Ikke bare en med to faktisk (SELECT og DELETE) ... Ingen fordel å la ting ligge evig i en tabell heller ;)

7000263[/snapback]

 

Bruk en HEAP, så forsvinner vel ting etterhvert?

7000300[/snapback]

Heap lar ting være der så lenge det skal være der (dvs. inntil en eller annen spørring sletter den) og maskina er oppe og går.

Men det bør da være mulig å kjøre en session-basert løsning for dem med sessions tilgjengelig (over 99 prosent, antar jeg), og heller bruke SQL-løsningen for alle andre tilfeller?

7000300[/snapback]

Ja, men det forutsetter at du veit hvem som kan sette cookie og ikke. Det enkleste er å gå for db uannsett. Tar jo ikke SÅ mye ressurser at det gjør noe?
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...