Avatar billede Six Nybegynder
02. oktober 2007 - 00:42 Der er 19 kommentarer og
1 løsning

PHP: Autologin - oop.

Hej eksperter.

Jeg har været ved at lære oop(http://www.eksperten.dk/spm/798048)

Og er i den forbindelse ved at prøve at lave et oop baseret loginsystem. - Nu mangler jeg at oprette et autologin som er oop baseret - jeg kan ikke helt finde hoved og hale i hvordan sådan en metode skal se ud, når det er oop baseret.

pt har jeg lavet følgende:

    function user_autologin() {
        $user = $this -> user;
        $pass = $this -> pass;
        $authorized = $this -> authorized;
       
               
        $sql = "SELECT autologin AS user_autologin FROM useroop WHERE username = '$user' AND password = '$pass'";
        $query = mysql_query($sql) or die(mysql_error());
        $row = mysql_fetch_assoc($query);
        $this -> autologin = $row['user_autologin'];
        $cookiedata = explode(" ",$_COOKIE['userautologin']);
        $cookieuser = $cookiedata[0];
        $cookiepass = $cookiedata[1];

       
            if($authorized == "true" && $user != "" && $pass != "") {
                if($this -> autologin == "1") {
                    setcookie('userautologin', $user ." ". $pass, time() + (60));
                } else {
                    setcookie('userautologin', "false", time() + (60));
                }
            } else {
                echo "Du har ingen adgang";
            }
    }

Men jeg ved ikke helt om jeg er rigtig på sporet af noget somhelst... har mistet overblikket.

Hvis i vil have hele min klasse vist, siger i bare til.
Avatar billede nielle Nybegynder
02. oktober 2007 - 08:14 #1
Hvis du ikke lige kan se OOP-vinklen på problemet, så start med at angribe det på den måde du kender. Bageefter kan du så arbejde på at flytte det ind i din klasse.

Så start med at spørge dig selv: hvordan ville jeg normalt gøre det?
Avatar billede Six Nybegynder
02. oktober 2007 - 12:53 #2
Ja, jeg tror jeg måske grejede tankegangen på den igår. Den funktion til at lave autologin, - den skal enten sætte en cookie eller også skal den ikke. - og så kan jeg når jeg skal lave login, tjekke efter om den cookie findes eller ej. Er det ikke i den stil det skal gøres ?

PS: Lige nu, er jeg ved at lave et loginsystem der gør brug af min klasse, bare for at finde ud af hvad det egentlig er det skal, og hvad de forskellige metoder skal returnere..
Avatar billede nielle Nybegynder
02. oktober 2007 - 17:54 #3
Den skal sætte en auto-login cookie hvis brugeren afkrydser i feltet "husk mig". Hvis hun ikke gør det, så skal cookien sættes til at expire.

Når en bruger besøger sitet: Tjek om der er en cookie og prøv at authentisere brugeren med oplysningerne fra cookien. Du må endeligt ikke stole blindt på hvad cookien siger. Altid tjekke imod basen. Husk på at folk har fri adgang til at redigere indholdet af en cookie.
Avatar billede Six Nybegynder
02. oktober 2007 - 21:25 #4
Det vil sige at jeg faktisk kan koge den helt ned til:

    function user_autologin($remember_me) {
        if(isset($remember_me) {
            if($remember_me = "ja") {
                setcookie('userautologin', $user ." ". $pass, time() + 10);
            } else {
                setcookie('userautologin', false, time() - 3600);
            }
        }
   
    }

Så er der vel egentlig ingen grund til at have deres valg registreret i databasen ?
Avatar billede Six Nybegynder
02. oktober 2007 - 21:26 #5
og så selvfølgelig noget i stil med (60*60*24*30) istedet for +10 ;) - men jeg tester lige pt :P
Avatar billede nielle Nybegynder
02. oktober 2007 - 21:36 #6
Ser umiddelbart fornuftig ud. Du skal nok gøre lidt mere ud af at kunne skelne $user fra $pass end at have et mellemrum imellem dem i cookien.

Nej, der er ingen grund til at gemme det i basen.
Avatar billede Six Nybegynder
02. oktober 2007 - 21:57 #7
Hvorfor er et mellemrum ikke nok? - jeg kan bare bruge / istedet. Men hvorfor er mellemrum ikke nok ? ;)

Jeg er gået igang med at lave "frontend" til det, så jeg kan prøve at teste tingene af nu.

$_POST['submit'] - Hvorfor kan jeg ikke bruge den, til at se om brugeren rent faktisk kommer fra min form? Jeg kan ikke få det til at virke. Jeg bruger method="post" og <input type="submit" name="submit" value="Log ind" /> og så bruger jeg isset() til at se efter om den er sat.(Hvilket den ikke er)
Avatar billede Six Nybegynder
02. oktober 2007 - 22:03 #8
Nå, jeg fik $_POST['submit'] til at virke ;)
Avatar billede nielle Nybegynder
02. oktober 2007 - 22:06 #9
> Hvorfor er et mellemrum ikke nok? - er du 100 % sikker på at der *aldrig* vil være et mellemrum i navnet eller i passwordet?
Avatar billede Six Nybegynder
02. oktober 2007 - 23:50 #10
Du har en pointe :)

Men den skulle min reg.exp jo gerne fange inden at brugeren får lov at oprette et password/brugernavn med mellemrum i :)

pt. har jeg fået lavet dette:

<?
include('LoginClasses.php');
//Debug kode
if(isset($_POST['username']) && isset($_POST['password'])) {
    $post_user = $_POST['username'];
    $post_pass = $_POST['password'];
    $post_rememberme = $_POST['remember_me'];
   
    if(isset($_POST['submit'])) {
        $ourUser = new user;
        $ourUser->users($post_user, $post_pass);
        $ourUser->authorizeUser();
        $login = $ourUser->authorized;
        if( $login == 'true') {
            $ourUser->user_autologin($post_rememberme);
            echo "du er logget ind";
        } else {
            echo "Du har ingen adgang";
           
        }
    }
} else {
    if(isset($_COOKIE['userautologin'])) {
        $cookiedata = explode("/", $_COOKIE['userautologin']);
        $cookieuser = $cookiedata[0];
        $cookiepass = $cookiedata[1];
       
        $ourUser = new user;
        $ourUser->users($cookieuser, $cookiepass);
        $ourUser->authorizeUser();
        $login = $ourUser->authorized;
       
        if( $login == 'true') {
            $ourUser->user_autologin("nej");
            echo "du er logget ind";
        } else {
            echo "Du har ingen adgang";
        }
    } else {
        echo "Brugerdata blev ikke fundet: Autologin fejlet";
    }
}
//Debug kode slut
?>

Ser det fornuftigt nok ud - mht. brugen af min klasse ?
Avatar billede Six Nybegynder
02. oktober 2007 - 23:52 #11
Vil lige tilføje at jeg er klar over at jeg skal teste om cookieuser og cookiepass eksisterer i min database før jeg giver dem adgang.
Avatar billede nielle Nybegynder
03. oktober 2007 - 06:56 #12
> Men den skulle min reg.exp jo gerne fange inden at brugeren...

Sådan kan du gøre det - men:

1) Så basere du dig jo fakisk på kode som ligger *uden* for klassen. Måske skulle du overveje at flytte validerings-koden ind i klassen...

2) Er du nu *helt* sikker på at du ikke ude i fremtiden fortryder og alligevel vil tillade mellemrum?
Avatar billede nielle Nybegynder
03. oktober 2007 - 08:24 #13
Hvis du har behov for at kunne skelne mellem værdierne af 2 eller flere variable, som du gemmer i en cookie, kan du f.eks. lade dig inspirere af Eksempel 1539 i:

http://dk2.php.net/setcookie

Det er en mere holdbar løsning end at prøve at skelne imellem dem ved at adskille dem med mellemrum eller andre tegn. :^)
Avatar billede Six Nybegynder
03. oktober 2007 - 14:06 #14
Jeg kan ikke se eksempel 1539 på den side der - jeg kan kun se: 1594, 1595 og 1596.

Jeg vil selvfølgelig lave en validering - men jeg er ikke gået igang med at lave "opret bruger" metoder endnu - men det er nu rart nok lige at komme nogle tanker igennem inden :)

Kan du ikke paste koden fra det eksempel ? - da jeg som sagt ikke kan se det derinde af en eller anden grund.
Avatar billede nielle Nybegynder
03. oktober 2007 - 14:21 #15
Det var underligt - nå men den lyder sådan:

Eksempel 1539. setcookie() and arrays

<?php
// set the cookies
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

// after the page reloads, print them out
if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name : $value <br />\n";
    }
}
?>
which prints


three : cookiethree
two : cookietwo
one : cookieone
Avatar billede nielle Nybegynder
07. oktober 2007 - 11:19 #16
Er du kommet vidre med denne her?
Avatar billede Six Nybegynder
07. oktober 2007 - 12:13 #17
heller ikke her nej, men jeg kan godt se pointen i den. Har været lidt tidspresset ;)

Men bare smid et svar, du har jo  hjulpet mig meget her :)
Avatar billede nielle Nybegynder
07. oktober 2007 - 21:17 #18
Svar :^)

Men lad os da bare gøre den færdig her når du en gang får tid. :^)
Avatar billede Six Nybegynder
11. oktober 2007 - 13:55 #19
Det lyder godt :D
Er lidt presset det næste stykke tid, men skal nok vende tilbage :)

Tak for hjælpen indtil videre.
Avatar billede nielle Nybegynder
11. oktober 2007 - 18:31 #20
Selv tak for point indtil videre :^)
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