Avatar billede styrk Nybegynder
09. juni 2003 - 20:38 Der er 30 kommentarer og
1 løsning

Sætte en cookie når man logger ind!

Hej.

Jeg er ved at lave et login system,- men når man logger ind vil den ikke sætte cookien, så sitet husker ens login, når man bevæger sig på sitet.

Min login function er som følger:

    function check_login($username,$password) {
        $q = $this->db->query("SELECT count(*) FROM users WHERE nickname='$username' AND code='$password'");
        if ($q->sqlResult() == "0") { return false; }
        if ($q->sqlResult() != "0")
        {
            $aT = $this->db->row($q);
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            setcookie("GalbotUserLoginInfo",$logininfo,time()+3600*2);   
            return true;
        }
    }

Denne funktion ligger i en class.

Hvis jeg jeg prøver at lave en test cookie, eks. bare i index.php, så skal jeg reloade siden 2 gange før den bliver sat. Men den vil ikke sætte cookien, inde i min login funktion.

Noger der har forstand på dette? håber i kan hjælpe og på forhånd tak!
Avatar billede ahv Nybegynder
09. juni 2003 - 20:46 #1
Istedet for at bruge for at bruge cookies, burde du bruge sessions.
Du starter session med ->
session_start(); // Skal være før alt output til browseren og når du skal registrere en session ->
$_SESSION['var'] = "et eller andet f.eks. brugerens id";

Så kan du altid tjekke om session er sat:

if(!isset($_SESSION['var'])) {
echo "Du er ikke logget ind";
} else {
// vis siden
Avatar billede styrk Nybegynder
09. juni 2003 - 20:47 #2
og for at slette en session skriver jeg bare $_SESSION[''] = "";

?
Avatar billede styrk Nybegynder
09. juni 2003 - 20:48 #3
$_SESSION['var'] = "";
Avatar billede ahv Nybegynder
09. juni 2003 - 20:49 #4
Hvis du ønsker at slette alle dine sessions

<?php
session_start();
session_destroy();
?>
Avatar billede styrk Nybegynder
09. juni 2003 - 20:51 #5
hvordan var det helt præcist jeg kunne sætte en session ? evt. variabel navn: GalbotUserLoginInfo og inhold: $logininfo

?
Avatar billede ahv Nybegynder
09. juni 2003 - 20:54 #6
<?php
session_start();
$_SESSION['GalbotUserLoginInfo'] = $logininfo;
?>

En session holder normalt i 20 min, så hvis ikke man er aktiv i 20 min sletter den sig selv, eller når man lukker browser vinduet.
Avatar billede styrk Nybegynder
09. juni 2003 - 20:55 #7
hmm - det virker stadig ikke...
Avatar billede ahv Nybegynder
09. juni 2003 - 20:58 #8
Altså:

i toppen af den side hvor du tjekker login og det ->
session_start();

din funktion ->

    function check_login($username,$password) {
        $q = $this->db->query("SELECT count(*) FROM users WHERE nickname='$username' AND code='$password'");
        if ($q->sqlResult() == "0") { return false; }
        if ($q->sqlResult() != "0")
        {
            $aT = $this->db->row($q);
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            $_SESSION['GalbotUserLoginInfo'] = $logininfo;   
            return true;
        }
    }

på de sider du så skal tjekke har du i toppen igen ->
session_start();

også tjekker vi om den er sat:

if (!isset($_SESSION['GalbotUserLoginInfo'])) {
echo "Du er ikke logget ind";
} else {
//vis siden
}
Avatar billede ahv Nybegynder
09. juni 2003 - 21:00 #9
Der er mange som har stillet spm. omkring sessions ->
http://www.eksperten.dk/kat/2/?searchtype=txt&words=session&method=and&sort=score&catid=2

Razor har kavet en guide omkring sessions ->
http://www.razor.dk/php.tutorials.sessions.php
Avatar billede styrk Nybegynder
09. juni 2003 - 21:01 #10
faktisk også det jeg har gjort - det virker bare ikke.

Hvis jeg flytter det ud af funktionen og class'en.. Og eks. smider det i toppen af min index.php (siden som inkludere alle undersider) så virker det.

Det samme gjorde den da jeg brugte cookies
Avatar billede ahv Nybegynder
09. juni 2003 - 21:06 #11
Sikker på den overhovedet kommer der ind i din funktion så?
Altså ind til ->
            $aT = $this->db->row($q);
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            setcookie("GalbotUserLoginInfo",$logininfo,time()+3600*2);   
            return true;
Avatar billede styrk Nybegynder
09. juni 2003 - 21:08 #12
ja, da 'return true' bliver udført rigtigt i den if jeg har sat op.


eks:

if($_POST["login"] == "1") {
    if($con->check_login($_POST["nickname"],$_POST["password"]) == true)
    {
        $con->JavaError("Du er nu logget ind","?");
    } else
    {
        $con->JavaError("Brugernavnet og,- eller password er forkert","?p=login");
    }
}

den popper op med "du er nu logget ind" - så burde den jo blive udført
Avatar billede ahv Nybegynder
09. juni 2003 - 21:12 #13
Sært.
Avatar billede ahv Nybegynder
09. juni 2003 - 21:12 #14
Men hvis det virker når du sætter dem uden for function hvorfor gør du så ikke det?
Avatar billede ahv Nybegynder
09. juni 2003 - 21:14 #15
Din login variabel an du vist også lave om til ->
$logininfo = "$username;$password;$aT[access]";
Avatar billede styrk Nybegynder
09. juni 2003 - 21:16 #16
tja - men når jeg sætter det uden for funktionen er det jo bare med en lille "test" cookie/session..

Jeg skal bruge det der mange steder så det ville være dumt at sætte det uden for en funktion!
Avatar billede ahv Nybegynder
09. juni 2003 - 21:19 #17
Prøv lige ->

        {
            echo "test";
            exit;
            $aT = $this->db->row($q);
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            setcookie("GalbotUserLoginInfo",$logininfo,time()+3600*2);   
            return true;
        }

Udskirver den test?
Avatar billede styrk Nybegynder
09. juni 2003 - 21:20 #18
ja, det gør den
Avatar billede ahv Nybegynder
09. juni 2003 - 21:23 #19
Kan du ikke echo indholdet af den på næste side?

echo $_COOKIE['GalbotUserLoginInfo'];
Avatar billede ahv Nybegynder
09. juni 2003 - 21:24 #20
Desuden kan de funktion ændres en lille smule:

    function check_login($username,$password) {
        $q = $this->db->query("SELECT count(*) FROM users WHERE nickname='$username' AND code='$password'");
        if ($q->sqlResult() == "0") { return false;
        } else {
            $aT = $this->db->row($q);
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            setcookie("GalbotUserLoginInfo",$logininfo,time()+3600*2);   
            return true;
        }
    }
Avatar billede styrk Nybegynder
09. juni 2003 - 21:24 #21
så skriver den det ud..  (bruger session)
Avatar billede ahv Nybegynder
09. juni 2003 - 21:25 #22
Hvis den skriver det ud, så er den vel også sat?
Avatar billede styrk Nybegynder
09. juni 2003 - 21:26 #23
ja, det gjorde den bare ikke før..

men hvorfor skriver den så ikke $aT[access] ind i den nu, nu indeholder den kun user og pass
Avatar billede ahv Nybegynder
09. juni 2003 - 21:27 #24
Prøv ->

$q = $this->db->query("SELECT count(*), * FROM users WHERE nickname='$username' AND code='$password'");
Avatar billede ahv Nybegynder
09. juni 2003 - 21:29 #25
$q = $this->db->query("SELECT count(*), access FROM users WHERE nickname='$username' AND code='$password'");
Avatar billede styrk Nybegynder
09. juni 2003 - 21:30 #26
fejl: SELECT count(*), access FROM users WHERE nickname='styrken' AND code='hEHehHE'
Avatar billede ahv Nybegynder
09. juni 2003 - 21:31 #27
function check_login($username,$password) {
        $q = $this->db->query("SELECT access FROM users WHERE nickname='$username' AND code='$password'");
        $aT = $this->db->row($q);
        if (!$aT) {
            return false;
        } else {
            $logininfo = "".$username.";".$password.";".$aT[access]."";
            setcookie("GalbotUserLoginInfo",$logininfo,time()+3600*2);   
            return true;
        }
    }
Avatar billede styrk Nybegynder
09. juni 2003 - 21:31 #28
så er det underlige bare, at når jeg logger ind nu, gemmer den ingen session
Avatar billede styrk Nybegynder
09. juni 2003 - 21:33 #29
jo nu, gemmer den igen (mig der havde tåget) men den smider stadig ikke access i
Avatar billede ahv Nybegynder
09. juni 2003 - 21:34 #30
Var det med den funktion fra ->
09/06-2003 21:31:36
?
Avatar billede styrk Nybegynder
09. juni 2003 - 21:36 #31
nu kører det på skinner, tak for hjælpen!
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