Avatar billede UlstrupDK Nybegynder
15. august 2013 - 21:14 Der er 6 kommentarer og
1 løsning

PHP, Cookies og session

Jeg er ved at lave en indkøbskurv, men jeg kan ikke få sat min cookie.

Jeg har tastet følgende:


function PutVareIKurv($produkt){
                global $mysqli;
               
               
               
               
              $ProduktQuery = $mysqli->query("SELECT * FROM shop_produkter WHERE id = '$produkt'");
              if ($ProduktQuery)
                 
                  {
                 
                  if ($ProduktQuery->num_rows == 1)
                     
                     
                        {
                     
                     
                                $dato = time();
                               
                                //Tjekker om brugeren har en session
                               
                                //Genererer cookie[session]
                                if($_COOKIE[kurvSes] == ""){
                                                           
                               
                                                   
                           
                              //SHOP_session generator
                              $uniknogle = "few%rw".$_SERVER['REMOTE_ADDR']."fsg";
                              $uniknoglemd5 = md5($uniknogle);
                               
                              setcookie("kurvSes",$uniknoglemd5,time()+604800);
                             
                                } else
                                   
                                    {
                                $uniknoglemd5 = addslashes($_COOKIE[kurvSes]);
                               
                                }
                               
                               
                               
                               
                                if(!$mysqli->query("INSERT INTO shop_Kurv
                                (session, produkt, dato)
                                VALUES
                                ('$uniknoglemd5', '$produkt', '$dato')
                                "))
                               
                                    {
                                    echo $mysqli->error;                           
                                    }
                                     
                        }
                    }   
                     
                   
                   
                    {
                 
                  // hvis num_rows ikke = 1 køres dette
                   
                }               
                   
               
            }


Jeg kan ikke få sat og genbrugt cookie, men der kommer data i databasen.
Hver gang jeg ligger en ny vare i kurven kommer der nyt id til $uniknoglemd5 og bliver det med forskellige værdier.
Den burde genbruge gammel id som den henter i else.

Jeg kan ikke gennemskue hvad jeg gør galt. Men tror det er kodningen her det er galt med:

if($_COOKIE[kurvSes] == ""){
                                                           
                               
                                                   
                           
                              //SHOP_session generator
                              $uniknogle = "few%rw".$_SERVER['REMOTE_ADDR']."fsg";
                              $uniknoglemd5 = md5($uniknogle);
                               
                              setcookie("kurvSes",$uniknoglemd5,time()+604800);
                             
                                } else
                                   
                                    {
                                $uniknoglemd5 = addslashes($_COOKIE[kurvSes]);
                               
                                }
Avatar billede erikjacobsen Ekspert
15. august 2013 - 22:18 #1
Jeg kan ikke genskabe det problem du anfører: http://n0p.com/984563.php  indholder koden:

  if($_COOKIE[kurvSes] == ""){
                                                         
      $uniknogle = "few%rw".$_SERVER['REMOTE_ADDR']."fsg";
      $uniknoglemd5 = md5($uniknogle);
                             
      setcookie("kurvSes",$uniknoglemd5,time()+604800);
      print "New cookie: ";
                         
  } else {
      $uniknoglemd5 = addslashes($_COOKIE[kurvSes]);
      print "Old cookie: ";
  }

  print $uniknoglemd5;

og giver den samme værdi hver gang, med "New" og "Old" som man forventer. Din fejl er nok noget andet.

Men det er aldeles håbløst at basere en såkaldt "unik" værdi på et IP-nummer. Bag samme IP-nummer kan der sidde fra 1 til flere 1000 personer, og de deler så samme indkøbskurv. Det skal du meget længere ud på landet med.
Avatar billede UlstrupDK Nybegynder
16. august 2013 - 06:35 #2
Jeg er enig.
Jeg har også brugt time og rand for at gøre den endnu mere unik. Men jeg har bare forsøgt at lave lidt mere simpel kode for at finde ud af om det var der problemet er.

Men du mener at koden er ok?
Avatar billede UlstrupDK Nybegynder
16. august 2013 - 13:44 #3
Jeg har fundet ud af at der ikke gemmes en cookie på pc. Burde der ikke det?
Avatar billede erikjacobsen Ekspert
16. august 2013 - 13:46 #4
Jo. Dvs med mit link får du "New" hver gang du opdaterer siden?
Avatar billede UlstrupDK Nybegynder
16. august 2013 - 14:38 #5
Jeps. Men den laver ikke en tekstfil på pc. Nu har jeg prøvet på to forskellige, så det er ikke min pc der fejler.
Min opfattelse burde den lave en fil(cookie) hvis der er en cookie skal den genbruge værdien heraf. Det sker bare ikke når jeg tilføjer  en variabel yderligere som rand() osv. I min unikkenøgle Så genererer den en ny værdi hver gang. Og ligger forskellige værdier i db
Avatar billede erikjacobsen Ekspert
16. august 2013 - 17:54 #6
Browseren skal sådan set bare få husket cookien - det behøver ikke ske i en bestemt tekstfil. Det kan være browseren har en lille database tilknyttet.

Men det vigtige er, at den bliver sendt tilbage.

Hvis mit link ovenfor siger "New" hver gang du trykker F5 (opdater), så sker der noget mystisk på din 'puter.
Avatar billede UlstrupDK Nybegynder
22. september 2013 - 07:43 #7
Tak for hjælpen. Jeg ved ikke hvad der sker, men det virker ikke. Prøver noget mere simpelt.
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
Computerworld tilbyder specialiserede kurser i database-management

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