Avatar billede tinepingvin Nybegynder
16. januar 2006 - 22:02 Der er 13 kommentarer og
1 løsning

Kan ikke læse indholsd i cookie. Hvorfor?

Hej med Jer!

Jeg er støt ind i et mindre problem. Jeg har lavet nedenstående script, men jeg kan ikke indlæse den cookie jeg med succes har oprettet.

Hvis jeg skriver: echo $_COOKIE['gemt_kodeord']; så får jeg intet retur. Burde jeg ikke få indholdet af cookien?

På forhånd tak!


<?php
function lavcookie(){
    global $gemt_kodeord;
    $gemt_kodeord = md5($_POST['indtastet_kodeord']);
    $antal_dage = 2;
    $udloebsdato = time() + (60 * 60 * 24 * $_POST['$antal_dage']);
    setcookie("gemt_kodeord", "$gemt_kodeord", $udloebsdato);
}

$indtastet_kodeord = $_POST['indtastet_kodeord'];

if ($indtastet_kodeord){
    lavcookie();
}

if ($_COOKIE['gemt_kodeord']){
    lavcookie();
}

?>


Ps. Der er mere kode ind ovenstående, men det er pt. der problemet ligger. Vil jeg tro! :-)
Avatar billede olebole Juniormester
16. januar 2006 - 22:05 #1
<ole>

Du kan først læse kagen, næste gang du loader et dokument ... ikke samtidig med, du sætter den  :)

/mvh
</bole>
Avatar billede tinepingvin Nybegynder
16. januar 2006 - 22:45 #2
-> Ole

Yep! Hvis jeg f.eks. trykker F5 i IE, så bliver den ved med at være logget ind. Hvis jeg f.eks. kopier stien og sætter den ind i en ny IE, så viser den login billedet igen. Dvs. at if ($_COOKIE['gemt_kodeord']){bliver aldrig indlæst som eksisterende.

Det burde den da!?!
Avatar billede olebole Juniormester
16. januar 2006 - 22:48 #3
Kan det hænge sammen med, at $_POST['$antal_dage'] er lig 0 (?):

    $antal_dage = 2;
    $udloebsdato = time() + (60 * 60 * 24 * $_POST['$antal_dage']);
Avatar billede olebole Juniormester
16. januar 2006 - 22:49 #4
- du mener nok: $_POST['antal_dage']  ;o)
Avatar billede tinepingvin Nybegynder
17. januar 2006 - 10:31 #5
hmm... grunden til at jeg skriver:  time() + (60 * 60 * 24 * $_POST['$antal_dage']); er f.eks. Hvis det i dag er den 17/01-2006, så skal den skrive d. 19/01-2006 i cookien.
Er det forkert at gøre det på den måde?
Avatar billede tinepingvin Nybegynder
17. januar 2006 - 10:35 #6
> du mener nok: $_POST['antal_dage']

Hov! :-) Ja okay.. det tjekker jeg lige i løbet af dagen! hæhæ... Tak!
Avatar billede tinepingvin Nybegynder
17. januar 2006 - 19:02 #7
Crap! Det hjalp ikke at ændre $_POST['$antal_dage'] til $_POST['antal_dage']

Det læser stadig ikke hvad der står i cookien. hmm...nederen. Her er hele koden. Det kan være du kan se noget ud af det:

<?php



function lavcookie(){
    global $gemt_kodeord;
    $gemt_kodeord = md5($_POST['indtastet_kodeord']);
    $antal_dage = 2;
    $udloebsdato = time() + (60 * 60 * 24 * $_POST['antal_dage']);
    setcookie("gemt_kodeord", "$gemt_kodeord", $udloebsdato);
}

$indtastet_kodeord = $_POST['indtastet_kodeord'];

if ($indtastet_kodeord){
    lavcookie();
}

echo $_COOKIE['gemt_kodeord'] . " indhold af cookie<br>";
if ($_COOKIE['gemt_kodeord']){
    lavcookie();
}

?>
<html>
<body>
<h1>Hemmelige opskrifter online</h1>
<?php
$rigtigt_kodeord = md5("kodeord"); // Det kodeord der giver adgang til siden er = "kodeord"

if($gemt_kodeord == $rigtigt_kodeord){
    echo "<h1>Her er den hemmelige opskrift på verdens bedste kager.</h1>";
} else {
?>
indtast det hemmelige kodeord
<form method=post action=<?php echo $_SERVER["PHP_SELF"]; ?> >
<input type=password name=indtastet_kodeord>
<input type=submit value="Vis mig opskriften">
</form>

<?php
}
?>
</body>
</html>
Avatar billede olebole Juniormester
17. januar 2006 - 22:00 #8
Har du testet, om $_POST['antal_dage'] overhovedet inderholder noget? Prøv at echo'e den ud - for hvis den er 0, bliver varigheden af kagen jo 0  ;o)
Avatar billede olebole Juniormester
17. januar 2006 - 22:03 #9
- og så skal du iøvrigt altid have gåseøjne om en HTML-attribut, hvis den indeholder en URL:
    <form action="<?=$_SERVER["PHP_SELF"]?>" .............>

- det skaber nok ikke fejl i dette tilfælde, men det er en fejl, du under alle omstændigheder bør rette  :)
Avatar billede tinepingvin Nybegynder
18. januar 2006 - 07:28 #10
Mange tak for indlæggene. Jeg får lige tjekket op på det.
Avatar billede tinepingvin Nybegynder
18. januar 2006 - 21:51 #11
Hep hey...

Problemer lå ikke i antal_dage, men mere en kombi af variabler der overskrev hinanden! :-)
Hvis du smider et svar ole, så får du alligevel points for hjælpe forsøgene!
Her er det endelige script:

<?php

// Funktion der opretter cookien!
function lavcookie(){
    global $gemt_kodeord;
    setcookie("gemt_kodeord", "$gemt_kodeord", time()+60);
}

// Indhenter det kodeord brugere har indtastet i password feltet
$indtastet_kodeord = $_POST['indtastet_kodeord'];

// Hvis det står noget i password feltet skal koden MD5'es og smides i en cookie
if ($indtastet_kodeord){
    $gemt_kodeord = md5($indtastet_kodeord);
    $Cookie_Check = "RunOff"; // Variabel der tjekker om "if ($_COOKIE['gemt_kodeord'])" må køre. Dette må den kun hvis cookien eksistere ved side indlæsning!
    lavcookie();
}

// Hvis siden lige er blevet indlæst vil $Cookie_Check være = "" og derfor vil $_cookie tjekke om cookien er oprettet!
if (!$Cookie_Check == "RunOff") {
    if ($_COOKIE['gemt_kodeord']){
        $gemt_kodeord = $_COOKIE['gemt_kodeord'];
        lavcookie();
    }
}
?>
<html>
<body>
<h1>Hemmelige opskrifter online</h1>
<?php

$rigtigt_kodeord = md5("kodeord"); // Det kodeord der giver adgang til siden er = "kodeord"

// Tjekekr om det indtastede eller cookie indhentede password er korrekt!
if($gemt_kodeord == $rigtigt_kodeord){
    echo "<h1>Her er den hemmelige opskrift på verdens bedste kager.</h1>";
} else {
?>
indtast det hemmelige kodeord
<form method=post action="<?php echo $_SERVER["PHP_SELF"]; ?>" >
<input type=password name=indtastet_kodeord>
<input type=submit value="Vis mig opskriften">
</form>

<?php
}
?>
</body>
</html>
Avatar billede olebole Juniormester
19. januar 2006 - 11:43 #12
I eksemplet (17/01-2006 19:02:12) var problemet i hvert fald, at der i din POST ikke eksisterede en variabel, der hed $_POST['antal_dage'] ... og så _skal_ kagens levetid jo blive 0 sekunder  ;o)
Avatar billede tinepingvin Nybegynder
19. januar 2006 - 11:48 #13
Ja, det har du ret I. Jeg vil også godt give dig æren for at sende mig på rette vej.
Endelige løsning var dog at sikre, div. variabler ikke overskrev hinanden! :-)

Tusind tak for hjælpen.
Avatar billede olebole Juniormester
19. januar 2006 - 12:01 #14
Selvtak ... og tak for points  ;o)
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