22. oktober 2000 - 12:39Der er
20 kommentarer og 2 løsninger
Skal bruge nogle cookies
Hejsa, jeg bruger et script, hvor man kan rate siderne (det er en søgemaskine). Indtil videre er sikkerheden for at folk ikke rater samme side flere gange, en IP log. Men man kan bare logge af og logge på igen, så får man (for det meste) en ny IP.
Så jeg vil gerne lave noget cookie halløj.
Cookien skal indholde et ID, på den side man rater (de har alle forskellig ID) Den valiable hedder $id Så skal den logge tidspunktet, $time
Den skal så blive liggende på brugerens computer i 7 dage, hvorefter man kan rate den samme side igen!
giv mig en e-mail så sender jeg dig nogle e-books der omhandler cookies i cgi/perl..
men det vil ikke give dig særlig mere \'sikkerhed\' at lave cookies. Nogle brugere har det helt slået fra, og hvis man endelig vil snyde så kan man jo bare slette cookien.
At teste på en IP-adresse er nu også dumt, da der sagtens kan sidde flere tusind brugere bag samme IP. Men ok, hvis det ikke skal bruges til noget særligt, så går det nok.
Cookies OG ip-adresse (husk også at checke X_FORWARDED_FOR hvis klienten kommer via en proxyserver) er et fint check for om det er gentagelser du ser stemme. Det er dog ikke en 100% løsning, da den erfarne bruger kan fifle med sin cookies fil, hvis det er det han ønsker.
matric> Hvis der sider tusind brugere bag samme IP har de for det mester også sammer USER. Den der med cockien er den mest sikre metode, hvis han de ikke vil til at lave sådan at brugerne skal oprete et brugernavn før de kan stemme.
En anden løjerlig ting, netstationen logger ip adresser og forhindre at den samme ip adresser kan have to kontoer åbne på en gang, det er et MEGA sikkerheds hul hvis man bruger en proxy server, så har alle andre der bruger samme proxy server automatisk adgang til ens konto på netstationen(forudsat at man har været dum nok til at logge på) Det viser bare en af de dumme fejl man kan komme ud for når man leger med ip adresser.
Med cookielib (her er kode, lige til at stjæle. Ikke køn, men den virker !) Det vigtige er HVORNÅR du læser/sætter cookies i contentheaderen. Det er den mest almindelige fejl.
---------------- snip ------------------
#!/usr/local/bin/perl
require \'cookie.lib\';
# start med kagecheck if (&GetCookies(\'MinKage\')) { $HarStemt=1; } else { $HarStemt=0; } # HTML Content-Type header. print \"Content-type: text/html\\n\";
# Set cookie hvis der me stemmes, se personen ikke kan stemme mere &SetCookies(\'MinKage\',1) if ($HarStemt == 0) ;
# End the headers sent to browser. print \"\\n\";
# Print Top of HTML Page print \"<h1>HarStemt=$HarStemt</h1>\\n\";
MEN, jeg kan ikke få expire til at virke ordenligt! Problemet er at den skal lægge i 7 dage og så kan man vote igen! Men jeg kan kun få den til at skrive en bestemt dato! Jeg har prøvet uden held at løse problemet sådan her:
sub SetCookieExpDate {
# If the date string is formatted as: Wdy, DD-Mon-YYYY HH:MM:SS GMT, set # # the $Cookie_Exp_Date to the new value and return 1 to signal success. # # Otherwise, return 0, as the date was not successfully changed. # # The date can also be set null value by calling: SetCookieExpDate(\'\'). #
en pænere løsning ville være at sætte \"afstemningsnummeret\" i kagen, og så kun tillade afsemninger for folk der ikke havde afstemningsnummeret i deres kage. Princippet vises herunder (pseudo kode):
$current=88; #nuværende afstemningsnummer $afstemningsnummer=&GetCookies(\'MinKage\'); .... &SetCookies(\'MinKage\',$current) .... if ($afstemningsnummer==$current) { ... har allerede stemt } else { ... lad ham stemme }
Du må selv lave den endelige kode, nu har du alle stumperne... Ellers må du sende et login, så jeg kan kode det \"realtime\". Programmering via webinterface er lidt for besværligt...
mcgemam fordi han hjalp meget og anderslund fordi han gav mig grundlag/ide til en mere flexibel løsning.
- Intenz
Synes godt om
Ny brugerNybegynder
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.