Avatar billede webfear Nybegynder
21. november 2002 - 10:36 Der er 8 kommentarer og
2 løsninger

Problemer med cookies

Hej
Jeg prøver at sætte en coockie for at kunne lave auto-login. Det er første gang, at jeg prøver at sætte en cookie, og det vil ikke rigtig virke.
Jeg skriver følgende:

35: if ($saetcookie<>'') {   
36:  setcookie("LKFqpgmr", $brugernavn, time() + 7257600);
37:  setcookie("LKFpswrd", $kodeord, time() + 7257600);
38: }
39: else {
40:  setcookie("LKFqpgmr","",time() - 3600);
41:  setcookie("LKFpswrd","",time() - 3600);
42: }

Men det giver denne fejl på min side:

Warning: Cannot add header information - headers already sent by (output started at /home/httpd/vhosts/lkf-viborg.dk/httpdocs/str/start.php:2) in /home/httpd/vhosts/lkf-viborg.dk/httpdocs/str/start.php on line 36

Warning: Cannot add header information - headers already sent by (output started at /home/httpd/vhosts/lkf-viborg.dk/httpdocs/str/start.php:2) in /home/httpd/vhosts/lkf-viborg.dk/httpdocs/str/start.php on line 37

Er der nogen der kan se hvad der er galt?

Mette Fournais
Avatar billede kimg Nybegynder
21. november 2002 - 10:39 #1
Du kan løse det ved at indsætte dette

top af fil
ob_start();

slutning af fil
ob_end_flush();
Avatar billede kimg Nybegynder
21. november 2002 - 10:41 #2
Det er fordi du har output inden du sætter cookien

Kim
Avatar billede Slettet bruger
21. november 2002 - 10:41 #3
Den rigtige løsning er at flytte koden op før output begynder. Du skal altså have flyttet det op i linie 1.
Avatar billede webfear Nybegynder
21. november 2002 - 10:45 #4
Jeg forstår ikke helt hvad i mener med outputtet?
Avatar billede Slettet bruger
21. november 2002 - 10:46 #5
Hvis du viser os linie 1 > 34 skal jeg vise dig det. (skjul venligst evt. adgangskoder osv)
Avatar billede Slettet bruger
21. november 2002 - 10:46 #6
output er i dette tilfælde at skrive til skærmen, f.eks. med echo "bla bla"; eller <html>
Avatar billede webfear Nybegynder
21. november 2002 - 10:49 #7
Mit script starter sådan her:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?
  // etablerer forbindelse til databasen
  $bruger = "******";
  $kode = "******";
    $link = mysql_connect("localhost", $bruger, $kode);
    $db = "LKFDB1";
    if (! $link) die("Der kunne ikke etableres forbindelse til databasen");
  mysql_select_db($db,$link) or die ("Kunne ikke åbne $db: ".mysql_error());
    // Slut på at etablere forbindelse til databasen
    // Hent brugernavn og kodeord fra cookie   
 
    // Hent brugeren fra db
    $resultat00 = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'");
    $bruger = mysql_fetch_row($resultat00);
if($logaf<>''){
  $bruger[1] = '';
    $bruger[2] = '';
    $brugernavn = '';
    $kodeord = '';
}
if($bruger[1]<>$brugernavn) {
  $resultat00 = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");
    $eksistererbruger = mysql_fetch_row($resultat00);
    if ($eksistererbruger[1]=='') {
    $fejl = 'forkertbrugernavn';
    }
    else {
      $fejl = 'forkertkodeord';
    }
}
else if($bruger[1]==$brugernavn && $bruger[2]=$kodeord) {
  $fejl = 'ok';   
// Sæt eller slet cookie (gemmes i 12 uger)
    if ($saetcookie<>'') {   
        setcookie("LKFqpgmr", $brugernavn, time() + 7257600);
        setcookie("LKFpswrd", $kodeord, time() + 7257600);
    }
    else {
      setcookie("LKFqpgmr","",time() - 3600);
        setcookie("LKFpswrd","",time() - 3600);
    }   
}

?>
Avatar billede Slettet bruger
21. november 2002 - 10:50 #8
Så skal du bare flytte din <doctype> ned efter der hvor du sætter din cookie:


<?
  // etablerer forbindelse til databasen
  $bruger = "******";
  $kode = "******";
    $link = mysql_connect("localhost", $bruger, $kode);
    $db = "LKFDB1";
    if (! $link) die("Der kunne ikke etableres forbindelse til databasen");
  mysql_select_db($db,$link) or die ("Kunne ikke åbne $db: ".mysql_error());
    // Slut på at etablere forbindelse til databasen
    // Hent brugernavn og kodeord fra cookie   
 
    // Hent brugeren fra db
    $resultat00 = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn' AND kodeord='$kodeord'");
    $bruger = mysql_fetch_row($resultat00);
if($logaf<>''){
  $bruger[1] = '';
    $bruger[2] = '';
    $brugernavn = '';
    $kodeord = '';
}
if($bruger[1]<>$brugernavn) {
  $resultat00 = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'");
    $eksistererbruger = mysql_fetch_row($resultat00);
    if ($eksistererbruger[1]=='') {
    $fejl = 'forkertbrugernavn';
    }
    else {
      $fejl = 'forkertkodeord';
    }
}
else if($bruger[1]==$brugernavn && $bruger[2]=$kodeord) {
  $fejl = 'ok';   
// Sæt eller slet cookie (gemmes i 12 uger)
    if ($saetcookie<>'') {   
        setcookie("LKFqpgmr", $brugernavn, time() + 7257600);
        setcookie("LKFpswrd", $kodeord, time() + 7257600);
    }
    else {
      setcookie("LKFqpgmr","",time() - 3600);
        setcookie("LKFpswrd","",time() - 3600);
    }   
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

Husk at selv en blank linie før <? tegnet tolkes som output!
Avatar billede webfear Nybegynder
21. november 2002 - 10:54 #9
1000 tak. Det ser ud til at virke :-)
Avatar billede Slettet bruger
21. november 2002 - 11:00 #10
Selv tak :)

Denne "problematik" går iøvrigt igen hvis du senere hen får problemer med andre af PHP's header() muligheder.

Den løsning kimg kommer med virker godt nok, men bør kun bruges i nødstilfælde. Det kurerer symptomerne, men ikke problemet.
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