Avatar billede kbirk Nybegynder
29. juli 2004 - 17:47 Der er 14 kommentarer og
1 løsning

Gemme objekter i sessionsvariabler

Hejsa..
Jeg har nu brugt flere timer på at få et objekt gemt i en sessions variabel, men uden held..
Jeg har prøvet 1000 ting, men intet har virket..
Nedenfor ses min kode som den ser ud nu..

<?    session_start();
   
    if(! session_is_registered("AConfig")){
        session_register("AConfig");
        echo "session er registreret..!<br>";
    }

    /*
    if($test > 10 || $test < 1){
        $test = 10;
    }
    $test = $test - 1;
    echo $test;
    */
   
   
    // * * * * Include Classes * * * *
    include "php/classes.php";

    // * * * * Include Functions * * * *
    include "php/functions.php";
   
    // * * * * Hvis ikke $pageID findes i urlen, skal $pageID sættes til 1 * * * *
    if($_GET["pageID"]){
        $pageID = $_GET["pageID"];
    }else{
        $pageID = 1;
    }

    // * * * * Create TConfig Class * * * *
    if(! $AConfig){
        $AConfig = new TConfig("config.ini");
        echo "Objekt er oprettet.. <br>";
    }    Echo $AConfig
   

    /*
    // * * * * unserialize Object * * * *
    $AConfig = unserialize($_SESSION['AConfig']);
    echo "--> ".$_SESSION['AConfig'] -> DB_adr;
    */
?>

Jeg har selv installeret php på en apache server.. Hvad gør jeg galt..?

Hilsen Kasper Birk
Avatar billede knudx Nybegynder
29. juli 2004 - 20:11 #1
Jeg tror 'include classes' linien skal stå før session_start() på den side hvor du 'genbruger' et tidligere oprettet objekt - så mu der bare ikke være noget output (echo, print...) i 'classes'-filen, for så virker session_start() ikke.

Udover det, så er koden lidt uoverskuelig ud... Ligner noget man har rodet med i en time! Udfra dit spørgsmål ville jeg tro der skulle være en linie à la
$_SESSION['AConfig'] = $AConfig;
men jeg kan ikke finde den.
Avatar billede kbirk Nybegynder
29. juli 2004 - 20:19 #2
Tak fo hjælpen.. Men jeg har stadig problemet..
Min kode ser nu således ud..

<?// * * * * Include Classes * * * *
include "php/classes.php";   
session_start();
   
   

    // * * * * Include Functions * * * *
    include "php/functions.php";
   
    // * * * * Hvis ikke $pageID findes i urlen, skal $pageID sættes til 1 * * * *
    if($_GET["pageID"]){
        $pageID = $_GET["pageID"];
    }else{
        $pageID = 1;
    }

    // * * * * Create TConfig Class * * * *
    if(! isset($_SESSION['AConfig'])){
        $_SESSION['AConfig'] = serialize(new TConfig("config.ini"));
        echo "Objekt er oprettet.. <br>";
    }   

    // * * * * unserialize Object * * * *
    $AConfig = unserialize($_SESSION['AConfig']);
    echo "--> ".$AConfig -> DB_adr;
?>

Det ser lidt mærkeligt ud.. Jeg har en menu, som afhænger af om objektet er i "live".. Man kan trykke 2 gange på linkene, men så er det slut, og den viser diverse fejl og advarsler..

Adressen er.. --> http://www.webconstructor.dk/CMSLight/
Avatar billede kbirk Nybegynder
29. juli 2004 - 20:20 #3
Og ja.. Har rodet med det i ALT for mange timer.. :'(
Avatar billede knudx Nybegynder
29. juli 2004 - 20:49 #4
hmm - det der serialize, det kender jeg ikke noget til, er det ikke noget man bruger til at gemme et objekt (instance) i en fil til senere brug??
Jeg har aldrig brugt det, men jeg mener at session skal gøre alt det pr. automatik - som fx

<?php
include class.php;
session_start();

if (!isset($_SESSION['dims'])) {
    $_SESSION['dims'] = new Dims('et eller andet');
} else {
    echo $_SESSION['dims']->dimse_oplysninger();
}
?>
Avatar billede kbirk Nybegynder
29. juli 2004 - 21:23 #5
Okay.. Det er nok meget rigtigt.. Læste det bare et sted men det var vist i forbindelse med at gemme det i en fil..

Jeg har lavet dette lille eksempel.. Men det ser ikke ud til at virke som det skal..
<?php

class Foo {
        var $bar;
}

session_start();
if(!isset($_SESSION['foo'])) {
        $_SESSION['foo'] = new Foo;
        $_SESSION['foo']->bar = 120;
        echo "objekt oprettes";
}else{
    echo "objekt er allerede oprettet";
}

echo $_SESSION['foo'] -> bar;

?>

Prøv at se på http://www.webconstructor.dk/otest/
Avatar billede knudx Nybegynder
29. juli 2004 - 21:51 #6
der er da mere ?!? Hvor kommer object(__PHP_Incomplete_Class)(2) { ["__PHP_Incomplete_Class_Name"]=> string(3) "foo" ["bar"]=> int(120) } fra?
Avatar billede kbirk Nybegynder
29. juli 2004 - 21:59 #7
Ja.. Har ændret i den da jeg også er ved at få hjælp et andet sted fra, sorry.. Den ser sådan her ud nu..

<?php

class Foo {
        var $bar;
}

session_start();
if(!isset($_SESSION['foo'])) {
        $_SESSION['foo'] = new Foo;
        $_SESSION['foo']->bar = 120;
        echo "objekt oprettes";
}else{
    echo "objekt er allerede oprettet";
}

echo $_SESSION['foo'] -> bar;

echo "<br>";
var_dump($_SESSION['foo']);

echo "<br>";

print ini_get("session.auto_start");

?>
Avatar billede knudx Nybegynder
29. juli 2004 - 22:04 #8
det virker på min server, kopieret direkte fra dig:
http://www.fredsvagt.dk/layout-demo/jtest1.php
Så måske er det alligevel noget med din php- eller appache-konfiguration... Damit achmit.
Avatar billede kbirk Nybegynder
29. juli 2004 - 22:13 #9
Hmm.. Ja det kunne godt se sådan ud..
Ved du noget om php.ini filen.. For jeg har ændret i en fil, men det ser ud som om den kigger i en anden.. Er itvivl om hvor den ligger..
Avatar billede knudx Nybegynder
29. juli 2004 - 22:29 #10
der er jeg sgu på bar bund må jeg indrømme! Så du må i gang med php.net...
Avatar billede kbirk Nybegynder
29. juli 2004 - 22:47 #11
Heh.. Har fundet problemet.. Har ikke genstartet apache efter jeg rettede i php.ini..

Men har stadig problemer med at få:
    if(! $_SESSION['AConfig']){
        $_SESSION['AConfig'] = new TConfig("config.ini");
        echo "Objekt oprettes.. <br>";
    }
Til at virke.. Selv om objektet er oprettet kommer den ind i løkken når jeg reloader..
Avatar billede knudx Nybegynder
29. juli 2004 - 23:03 #12
prøv isset ?!?
Avatar billede kbirk Nybegynder
29. juli 2004 - 23:32 #13
Yes yes.. Nu virker det hele.. Tusind tak for hjælpen..
Avatar billede kbirk Nybegynder
29. juli 2004 - 23:33 #14
lav lige et svar..
Avatar billede knudx Nybegynder
30. juli 2004 - 01:13 #15
Selv tak, og sov godt!
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