Avatar billede intenz Novice
22. oktober 2000 - 12:39 Der 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!

Er der nogle der kan hjælpe med det?

-------
Intenz
http://www.igaming.nu
Avatar billede matric Nybegynder
22. oktober 2000 - 14:46 #1
Hvad skal det programmeres i? cgi/perl?

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.

matric@traceroute.dk
Avatar billede intenz Novice
22. oktober 2000 - 14:50 #2
Ja, det skal programmeres i perl/cgi (se hvor jeg skrev spørgsmålet!)

Det vil da give mere sikkerhed at have både IP log og cookies.

- Intenz
Avatar billede matric Nybegynder
22. oktober 2000 - 14:54 #3
yeah okey.. men skriv mig en mail så sender jeg..
Avatar billede erikjacobsen Ekspert
22. oktober 2000 - 14:59 #4
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.
Avatar billede matric Nybegynder
22. oktober 2000 - 15:06 #5
du bør teste på ip+user

dvs. både REMOTE_ADDR og REMOTE_USER
Avatar billede mcgemam Nybegynder
23. oktober 2000 - 09:39 #6
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.

Et fint cookie lib til perl findes her:
http://www.worldwidemart.com/scripts/cookielib.shtml

Der er også eksempler på hvordan du bruger det. (så der er lagt op til genbrug afkode ;-)

Håber dette hjælper dig !
Avatar billede intenz Novice
23. oktober 2000 - 14:50 #7
min mail -> mogenshoj@hotmail.com

Jeg har selv prøvet cookielib før, det fik jeg 0 ud af...

- Intenz
Avatar billede cybermike Nybegynder
24. oktober 2000 - 12:10 #8
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.
Avatar billede mcgemam Nybegynder
24. oktober 2000 - 15:08 #9
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\";
Avatar billede mcgemam Nybegynder
24. oktober 2000 - 16:33 #10
Hvis du vil vide mere om cookies, er dette det rigtige sted at læse. Kedeligt men yderst korrekt

http://home.netscape.com/newsref/std/cookie_spec.html
Avatar billede intenz Novice
24. oktober 2000 - 18:55 #11
Hmmm, nu virker det meste

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(\'\').  #

    if ($_[0] =~ /^\\w{3}\\,\\s\\d{2}\\-\\w{3}-\\d{4}\\s\\d{2}\\:\\d{2}\\:\\d{2}\\sGMT$/ ||
        $_[0] eq \'\') {
        $Cookie_Exp_Date = &date;
        return 1;
    }
    else {
        return 0;
    }
}


sub date
{
  local( $time, $format )= @_;

  local( $sec, $min, $hour, $mday, $mon, $year,
          $wday, $yday, $isdst )= localtime( $time );

  $sec = \"0$sec\" if ($sec < 10);
  $min = \"0$min\" if ($min < 10);
  $hour = \"0$hour\" if ($hour < 10);
  $mon = \"0$mon\" if ($mon < 10);
  $mday = \"0$mday\" if ($mday < 10);
  local( $month )= ($mon + 1);
  local( @months )= ( \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",
                      \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" );

  local( @weekday )=( \"Monday\", \"Tuesday\", \"Wednesday\",
              \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" );

  if ( !defined( $format ) ){
      return \"$mday $months[$mon] 19$year at $hour\\:$min\\:$sec\";
  }
  #else
      return \"$weekday[$wday], $month-$mday-$year $hour\\:$min\\:$sec GMT\";
}

Men der sker ikke en skid.

- Intenz
Avatar billede intenz Novice
24. oktober 2000 - 19:02 #12
Ups, så glemte noget i mit sub, her er det nye:
sub date
{
  local( $time, $format )= @_;

  local( $sec, $min, $hour, $mday, $mon, $year,
          $wday, $yday, $isdst )= localtime( $time );

  $sec = \"0$sec\" if ($sec < 10);
  $min = \"0$min\" if ($min < 10);
  $hour = \"0$hour\" if ($hour < 10);
  $mon = \"0$mon\" if ($mon < 10);
  $mday = \"$mday + 7\" if ($mday < 23);
  $mday = \"$mday + 6\" if ($mday < 24);
  $mday = \"$mday + 5\" if ($mday < 25);
  $mday = \"$mday + 4\" if ($mday < 26);
  $mday = \"$mday + 3\" if ($mday < 27);
  $mday = \"$mday + 2\" if ($mday < 28);
  $mday = \"$mday + 1\" if ($mday < 29);
  $mday = \"0$mday\" if ($mday < 10); 
  local( $month )= ($mon + 1);
  local( @months )= ( \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",
                      \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" );

  local( @weekday )=( \"Monday\", \"Tuesday\", \"Wednesday\",
              \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" );

  if ( !defined( $format ) ){
      return \"$mday $months[$mon] 00$year at $hour\\:$min\\:$sec\";
  }
  #else
      return \"$weekday[$wday], $month-$mday-$year $hour\\:$min\\:$sec GMT\";
}


Avatar billede mcgemam Nybegynder
25. oktober 2000 - 11:01 #13
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
}
Avatar billede intenz Novice
25. oktober 2000 - 15:40 #14
Ja, det ville nok være en ide, men jeg mangler stadig den expire date ting...

Den skal løbe ud 7 dage efter den er lavet!
Avatar billede mcgemam Nybegynder
25. oktober 2000 - 15:50 #15
nu kiggede jeg lige på din kode...

du vil med stor fordel kunne anvende sprintf til at gøre din kode NOGET mindre:

prøv en \"perldoc -f sprintf\"

her er en snippet:
$klokken=sprintf(\"%02d:%02d:%02d GMT\",$hour,$min,$sec);

Avatar billede intenz Novice
26. oktober 2000 - 19:42 #16
????

Den kan jeg ikke lige gennemskue, hvor skal jeg sætte det ind, og hvad gør den?

Løser den problemet med datoen?
Avatar billede mcgemam Nybegynder
27. oktober 2000 - 09:46 #17
den løser ikke cookietingen, men sparer dig for en masse liniers kode for at formattere datostrengen....

$klokken=sprintf(\"%02d:%02d:%02d GMT\",$hour,$min,$sec);
print \"$klokken\\n\";

ville give

\"12:01:07 GMT\" uden at skulle checke for om $sekunder var mindre end 10 osv.

Det var bare et lille hent.

Et andet hint: Prøv at skrive GMT+2 istedet for GMT (det er her vi er indtil vintertiden vender tilbage på søndag)
Avatar billede intenz Novice
29. oktober 2000 - 17:55 #18
kom nu boys, jeg ved i kan klare den...
Avatar billede mcgemam Nybegynder
30. oktober 2000 - 12:26 #19
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...
Avatar billede intenz Novice
30. oktober 2000 - 22:40 #20
Har du så lige en email adresse jeg kan få?
Avatar billede Slettet bruger
02. november 2000 - 13:32 #21
Idet jeg forestiller mig, at du har perl installeret, vil jeg foreslå at bruge CGI (eller evt CGI::Cookie) modulet, som gør det _meget_ nemt!

$ perldoc CGI
for dokumentation.

#!/usr/bin/perl -wT

use strict;
use CGI;
my $q = new CGI;

# læs en cookie

my %id_cookie = $q->cookie(\'id\');

# lav en cokie
my $new_cookie = $q->cookie(-name=>\'id\',
                            -value=>$id,
                            -path=>\'/\',
                            -expires=>\'+7d\');

# husk cookie når header udskrives
print $q->header(-cookie=>$new_cookie);

osv osv

-anders
Avatar billede intenz Novice
11. november 2000 - 18:16 #22
mcgemam og anderslund får poínt!

mcgemam fordi han hjalp meget og anderslund fordi han gav mig grundlag/ide til en mere flexibel løsning.

- Intenz
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
Kurser inden for grundlæggende programmering

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