Avatar billede satyriasis Nybegynder
07. august 2007 - 00:28 Der er 5 kommentarer og
1 løsning

set cookie imens man er logget ind

Hej eksperter..

Jeg har et problem med at sætte cookies..
Jeg vil gerne have lavet så jeg kan sætte en cookie imens man er logget ind på mit system.

Men problemet er at der øverst på min side jo ligger en session_start() for at man kan tjekke om man er logget ind, og derved får jeg beskeden om headers has already been send.. blablabla..

Min første tanke var at jeg kunne lave cookien i en anden fil, så man udfyldte en formular og blev sendt til filen der skaber cookien og derved igen blev videresendt til en side hvor der står "Cookien blev oprettet", men det kan heller ikke lade sig gøre da header('location:') jo ikke kan kaldes efter setcookie() :S

hvordan løser jeg dette problem?
Avatar billede thesurfer Nybegynder
07. august 2007 - 00:42 #1
Fejlen "headers has already been send.." kommer når du bruger "header(Location:..", hvis:

- du har et linieskift, før header-linien
- du har udskrevet et eller andet

Løsning:
Det allerførste tegn i filen SKAL være: <

Og så må du IKKE udskriver noget til browseren, hverken ved at bruge echo eller print.. eller ved at afslutte med "?>" og starte med "<?" igen..


Med andre ord:

Der må ikke sendes noget som helst til browseren, før header-linien.

Hvis du ikke har forstået det, smid lige din kode herind..
Avatar billede satyriasis Nybegynder
07. august 2007 - 00:50 #2
Min formularfil:

<?
if($_POST['ID']) {
    $find_cookie = mysql_query("SELECT access FROM users WHERE id = '".$_POST['ID']."'");
    if($find_cookie) {
        $c = mysql_fetch_array($find_cookie);
        if($c['term_access'] == null) {
            $letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $term_acc = "";
            for($i = 0; $i < 35; $i++)
                $acc .= $letters[rand(0,strlen($letters)-1)];
     
            mysql_query("UPDATE users SET access = '$acc' WHERE id = '".$_POST['ID']."'");
        } else {
            $term_acc = $c['term_access'];
        }
        if(set_cookie("log", $acc, (time()+3600*24*365*99))) //sætter en cookie til at vare 99 år
            $mess = "Cookien blev dannet korrekt";
            $mess .= "<br /> <a href='java script:history.go(-1);'>Tilbage</a>";
    } else {
        $mess = "Butikken blev ikke fundet i databasen!";
    }
}

?>

<?
    if($mess)
        echo $mess;
    else {
?>

Opret terminalcookie:

<form action="<?=$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; ?>" method="post">
    Indtast ID: <input type="text" name="ID" />
   
    <input type="submit" value="Opret Cookie" name="addCookie">
</form>
<? } ?>

Øverst lige efter min session_start() i index.php har jeg sat includet min function der sætter min cookie:

<?php
function set_cookie($name, $value, $exp) {
    if(setCookie($name, $value, $exp))
        return true;
    else
        return false;   
}
?>
Avatar billede satyriasis Nybegynder
07. august 2007 - 01:38 #3
Jeg har lige set på noget jeg tidligere har kodet, hvor man under login kan sætte hak i at huske sit password, der har jeg også en session_start() i toppen og længere nede sætter jeg så min cookie hvis man har valgt at huske password.. Og der virker funktionen fint.. Så hvad der er galt forstår jeg overhovedet ikke :S
Avatar billede satyriasis Nybegynder
07. august 2007 - 02:34 #4
Nu har jeg sat hele min handling op øverst i index.php og nu kommer den ikke med header fejlen mere.. Men min cookie bliver stadig ikke sat.. Og jeg kan absolut ikke se en eneste fejl..

Min kode i toppen af index.php ser nu sådan ud:

if($_POST['ID']) {
    $find_cookie = mysql_query("SELECT access FROM users WHERE id = '".$_POST['ID']."'");
    if($find_cookie) {
        $c = mysql_fetch_array($find_cookie);
        if($c['access'] == null) {
            $letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $acc = "";
            for($i = 0; $i < 35; $i++)
                $acc .= $letters[rand(0,strlen($letters)-1)];
     
            mysql_query("UPDATE users SET access = '$acc' WHERE id = '".$_POST['ID']."'");
        } else {
            $acc = $c['access'];
        }
        setcookie("termLog", $acc, time() + (3600 * 24 * 365 * 99)) or die("FEJL");
        if($_COOKIE['termLog']) {
            $mess = "Cookien blev dannet korrekt";
            $mess .= "<br /> <a href='java script:history.go(-1);'>Tilbage</a>";
        } else {
            $mess = "Cookien blev ikke dannet";
            $mess .= "<br /> <a href='java script:history.go(-1);'>Tilbage</a>";
        }
    } else {
        $mess = "Elementet blev ikke fundet i databasen!";
    }
}
Avatar billede thesurfer Nybegynder
07. august 2007 - 20:20 #5
Jeg kan desværre ikke fortælle dig hvad der er galt, da jeg ikke programmerer i PHP..

Men det er der mange andre der gør.. det er bare et spørgsmål om tid, før der kommer en PHP-person forbi..
Avatar billede satyriasis Nybegynder
07. august 2007 - 22:03 #6
Problemet var at min udløbstid var sat forkert på en eller anden måde, så jeg satte nogle andre tal ind og så virkede det..
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