Avatar billede niceday Nybegynder
12. juli 2003 - 22:37 Der er 23 kommentarer og
1 løsning

Forhindre tilbage

Jeg har en kontaktformular, hvor man kan indtaste en besked og sende den. Herefter kommer man frem til beskeden "Mailen er sendt.".

Hvordan forhindre jeg at brugeren så bare trykker 'tilbage' og sender den igen?
Avatar billede spoony Nybegynder
12. juli 2003 - 22:41 #1
Når du modtager emailen, kan du blokere emailadressen som den er afsendt fra. Det er ikke så svært, hverken i Hotmail eller outlook hvis det er det du bruger.
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 22:42 #2
Hvorfor er det et problem? Hvis nu brugeren vil sende noget mere?
Er det fordi du ikke vil have en masse spam? Så kan du vel gemme sidst indsendte form-data i en db og tjekke om det er ens?
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 22:43 #3
Ok, jeg tror ikke jeg forstår spørgsmålet... :P
Avatar billede spoony Nybegynder
12. juli 2003 - 22:45 #4
hvad er det du ikke forstår jakobsynder??
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 22:46 #5
Jaah... Eller også gør du ikke, hehe.
Jeg mener bare, vi har svaret i 2 vidt forskellige retninger.
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 22:48 #6
Egentlig tror jeg måske han mener, at man ikke skal risikere mailen sendt flere gange ved uheld og ikke bevidst spam, fordi en bruger trykker "tilbage" for at komme "videre".
Avatar billede double-g Juniormester
12. juli 2003 - 22:51 #7
Du kan sætte en side ind imellem kontakt formularen og "mail sendt" siden. Det eneste den skal gøre er at videresende til "mail sendt" siden. Hvis der så er nogen der bruger "tilbage" kommer de ikke længere end til viderstillings siden og ryger tilbage på "mail sendt"
Avatar billede niceday Nybegynder
12. juli 2003 - 22:56 #8
Det skal f.eks. bruges i et comminity, hvor brugere kan sende beskeder til hinanden. For at undgå bevidst spam, hvor en bruger trykker sig tilbage og sender igen, skal der ligge en blokering - en slags "siden er forældet".

Der eksisterer allerede en mellem-side, hvor beskeden sendes, men man kan jo bare trykke 'tilbage' 2 gange og så nytter dette ikke noget alligevel.
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 23:02 #9
Uhm, siden bliver vel automatisk forældet hvis du bruger post?
Du kan jo lave det så en bruger-individuel database værdi skal være f.eks '1' for at man kan sende. Når man har afsendt en mail via formularen bliver den automatisk sat til '0'. For at den "resettes" til '1' skal man f.eks. omkring en bestemt navigationsvej. (Eks.: Man klikker på "send besked" -> værdien bliver sat og man redirectes til den egentlige "send besked" -side.)
Avatar billede niceday Nybegynder
12. juli 2003 - 23:09 #10
Ja, det kunne være en løsning, men årsagen til at jeg placerer den i denne kategori er for at lave det i ren html.

Lige nu forhindres det på følgende måde.
- Der trykkes på "send besked til brugeren"
- Popup kommer frem med tekstfelt og der laves et unikt id vha. brugerid og timestamp, som sendes med submit (hidden) og gemmes i databasen med beskeden.
- Såfremt en bruger går tilbage og sender igen vil der i en enkelt søgning i databasen blive afsløret at der allerede er sendt en mail fra den popup.

Men det burde da kunne laves mere enkelt?
Avatar billede double-g Juniormester
12. juli 2003 - 23:11 #11
long shot - hvad med at indsætte en no-cashe metatag på formular siden ?

(jeg har ikke afprøvet om det virker)
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 23:15 #12
double-g >> Hehe, god ide.
Man kan jo ikke se skoven for bare træer her. :-)
Avatar billede niceday Nybegynder
12. juli 2003 - 23:17 #13
double-g >

Lyder som en god ide - hvad er koden for dette og hvor skal den være?
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 23:18 #14
<META http-equiv='Pragma' content='no-cache'>
Avatar billede jakobsynder Nybegynder
12. juli 2003 - 23:19 #15
Den skal være i mellem <HEAD> og </HEAD>
Avatar billede double-g Juniormester
12. juli 2003 - 23:37 #16
ifgl. http://www.eksperten.dk/spm/341526 så virker det desværre ikke
Avatar billede niceday Nybegynder
12. juli 2003 - 23:38 #17
Ja, jeg får det eller ikke til at virke - har også prøvet med timeout i asp.
Avatar billede jakobsynder Nybegynder
13. juli 2003 - 11:18 #18
Øhm, selvfølgelig forhindrer det ikke at siden kommer frem. Men det skulle gerne forhindre at teksten man lige sendte stadig står der.
Og hvis det ikke lige virker for dig niceday, så er det fordi den allerede ligger i cachen, så måske skal den lige tømmes først. Desværre er denne løsning faktisk ikke særlig sikker. Man er nødt til at indsætte det meta tag i <head> ovenover din <body> og samtidigt lave et <head> mere under din body.
Eks.:
<html>
<head> <meta http- bla> </head>
<body> bla bla bla bla </body>
<head> <meta http- bla> </head>
</html>
Men så skulle det også være rimelig sikkert. Dette i kombination med f.eks mit ovenstående forslag med bruger-individuel database værdi, og en funktion der gør at man "poster" for at komme til send-siden.
Det at en side i history har modtaget variabler via post tvinger jo brugeren til at opdatere. Og hvis database værdien lige er ændret, så man SKAL åbne nyt vindue for at sende, så vil man ikke engang få en ikke-virkende formular frem, men en smart anti-spam besked formuleret af dig.
Puha sikke en stil.
Avatar billede jakobsynder Nybegynder
13. juli 2003 - 11:34 #19
Jeg glemte lige at tilføje, at det med 2 x <head> vist kun er et problem i IE.
Hmm, og vist kun i gamle versioner af IE. Se her:
http://support.microsoft.com/support/kb/articles/Q222/0/64.asp
Så det er måske alligevel ikke så nødvendigt :-)

Alternativt kan du bruge PHP:

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

Eller ASP:

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
Avatar billede niceday Nybegynder
14. juli 2003 - 13:52 #20
Tak for 'stilen' Jakobsynder :-)

Jeg tror jeg vil vælge at benytte min allerede nævnte asp-løsning, men vil dog alligevel give dig alle points fordi du i det mindste har gjort et godt forsøg. Jeg vil dog ikke vælge at anvende din løsning i det konkrete problem, men kan finde anvendelse andre steder på siden.

Min løsning er derfor:
1. Sendbesked-popup åbnes hvor der laves et et unikt stempel (Tid + dato + userID).
2. Denne sendes med vil afsendelse af beskeden (ligger som hidden i formen)
3. Beskeden gemmes i databasen sammen med den unikke kode.
4. Hvis en person går tilbage vil vedkommende stadig se den samme form med indhold, men ved forsøg på at sende formen igen (også med andet indhold), vil det blive nægtet. Lige inden beskeden gemmes i databasen, vil der jo blive søgt på den unikke kode, som allerede findes.

Også tak til Jer andre.

Smid lige et svar jakobsynder
Avatar billede jakobsynder Nybegynder
14. juli 2003 - 13:58 #21
Ellers tak du. Behold dem selv.

Held og lykke med det.
Avatar billede jakobsynder Nybegynder
10. august 2003 - 04:43 #22
Lukketid? :-)
Avatar billede niceday Nybegynder
13. august 2003 - 12:42 #23
Ja, der er der vist :-)
Avatar billede niceday Nybegynder
13. august 2003 - 12:43 #24
Tak skal du have.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester