Avatar billede z1n Nybegynder
22. juni 2005 - 15:41 Der er 12 kommentarer og
1 løsning

PHP5: Class til session

Hej,

Jeg har denne her User klasse som jeg har lavet før med mysql, den opretter et objekt ved login. Nu lejer jeg lidt med LDAP og efter at have konverteret den til LDAP så kan jeg sq ikke få det til at spille. Den laver Object incomplete knald. Det virker dog fint så længe jeg er på samme side som $user = new User(); Klassen putter si g selv in i $_SESSION["user"] og når jeg henter objektet fra $_SESSION["user"] så bliver det incomplete ... HELP !!!
<class>

    class User {
        public $uid;
        public $username;
        public $password;
       
        public $fullname;
        public $titel;
        public $tlf;
        public $email;
                       
        public $logintime;
        public $loggedin = false;

        public function __construct() {
            $this->username = $_POST["username"];
            $this->password = $_POST["password"];
            $this->login();
        }   
               
        private function login() {
            $host=LDAPHOST;
            $dn=DN;
           
            $ldapres = ldap_connect($host);
            if (!$ldapres) echo "Fejl!, $ldapres";
            $ldapbind=@ldap_bind($ldapres,"cn=$this->username,$dn",$this->password);
           
            if ($ldapbind and $this->password != "" and $this->username != "") {
                $res=ldap_list($ldapres,$dn,"cn=$this->username");
                if (!$res) die( "Failed, $res");
                $sr=ldap_get_entries($ldapres,$res);
                if (!$sr) die( "<br>Failed, $sr");
               
                for ($entryID=ldap_first_entry($ldapres,$res);$entryID!=false;$entryID=ldap_next_entry($ldapres,$entryID)) {
                    $a=ldap_get_attributes($ldapres,$entryID);
                   

                    $this->fullname=utf8_decode($a['givenName'][0])." ".utf8_decode($a['sn'][0]);
                    $this->titel=utf8_decode($a['title'][0]);
                    $this->tlf=$a['telephoneNumber'][0];
                    $this->email=$a['mail'][0];
                }
               
                $this->loggedin = true;
                $this->logintime = time();
                $this->password = md5($this->password);
               
                $_SESSION["user"] = serialize($this); # GEM OBJEKT I SESSION
                ?><script> location.href = "index2.php"; </script><?php # REDIRECT
            }
            else {
                echo "Forkert brugernavn eller password!";
            }
            ldap_close($ldapres);
        }
    }

</class>

<login>

if(isset($_POST["login"])) {
        $user = new User();
}

</login>

<hent session>

    $user = unserialize($_SESSION["user"]);
?>
<pre>
<?=print_r($user);?>
</pre>
Velkommen <b><?=$user->fullname?></b> til DSR's IntraNet

</hent session>
Avatar billede z1n Nybegynder
22. juni 2005 - 16:12 #1
pls help .. :(
Avatar billede avminarm Juniormester
22. juni 2005 - 18:20 #2
jeg kender nul til ldap - men har du husket session_start(); ?
Avatar billede z1n Nybegynder
22. juni 2005 - 19:04 #3
ja den er med ... tror nu ikke ldap tingen er skyld i det ... :/
Avatar billede z1n Nybegynder
22. juni 2005 - 19:16 #4
alstå selve initialisering af data in i klasse vars virker. Den laver kun incomplete ved hent af objekt fra session !
Avatar billede avminarm Juniormester
22. juni 2005 - 22:01 #5
beklager - men så er jeg lige så blank som dig ;o/
Avatar billede riversen Nybegynder
22. juni 2005 - 22:02 #6
prøv serialize og unserialize når du hhv. sætter og henter session
Avatar billede riversen Nybegynder
22. juni 2005 - 22:11 #7
dooh.... glemt det lige
Avatar billede coderdk Praktikant
23. juni 2005 - 06:26 #8
Du skal require filen med class'en i INDEN du laver session_start()!
Avatar billede z1n Nybegynder
23. juni 2005 - 09:14 #9
<login>

    require("util/classes.inc");
   
    session_start();
   
    if($_GET["cmd"] == "logud") {
        session_destroy();
        ?><script> location.href = "index.php"; </script><?php # REDIRECT
    }
    else {
        if(isset($_SESSION["user"])) {
            ?><script> location.href = "index2.php"; </script><?php # REDIRECT
        }
    }

    if(isset($_POST["login"])) {
        $user = new User();
    }

</login>

den laver stadig: (ved print_r)

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => User
    [uid] =>
    [username] => dsr-sn
    [password] => c3f5b2d6e65ee8e0b4209c075680f631
    [fullname] => Simon Nielsen
    [titel] => Superman
    [tlf] =>
    [email] =>
    [logintime] => 1119510783
    [loggedin] => 1
)
1

det underlige er at hvis jeg skriver print_r($user) på login siden virker det ... derfor troede jeg lige det ville spillede når jeg flyttede session_start() :D men næh nej :(
Avatar billede z1n Nybegynder
23. juni 2005 - 09:18 #10
nu prøvede jeg lige at lave print_r(unserialize($_SESSION["user"])); på login siden også.. og den er heller ikke incomplete ... men så snart jeg skifter side bliver den det .. det er sq da weird
Avatar billede z1n Nybegynder
23. juni 2005 - 10:50 #11
der må da være nogle som er über !?
Avatar billede z1n Nybegynder
23. juni 2005 - 12:47 #12
YES jeg fandt ud af det ... det var sq med at classes.inc skulle includeres før session start. men ikke på index.php men på index2.php :D:D doh ! thx .. coderdk smid et svar !
Avatar billede coderdk Praktikant
23. juni 2005 - 17:44 #13
Yessir :)
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