Avatar billede aitnemed Novice
08. februar 2011 - 13:01 Der er 8 kommentarer og
1 løsning

Session variable opdateres uforklarligt?!

Hej eksperter

Jeg har skrevet følgende kode i toppen på en webside:

session_start();
$_SESSION['page1'] = "visited";
echo($_SESSION['page1']);
echo($_SESSION['page2']);


Først gang siden indlæses er outputtet "visited" men anden gang siden indlæses er outputtet "visitedvisited"... Hvorfor?

Da der outputtes "visited"*2, må det betyde, at $_SESSION['page2'] har fået tildelt "visited" som værdi, men jeg har ingen kode, der gør dette?
Avatar billede intenz Novice
08. februar 2011 - 14:26 #1
Er det gætteleg? Jeg kan da godt være med.

Du er sikker på det er echo($_SESSION['page2']); der udskriver den andet 'visited'?

Da der outputtes "visited"*2, må det betyde, at $_SESSION['page2'] har fået tildelt "visited" som værdi, men jeg har ingen kode, der gør dette?
Måske. Eller at du tilføjer 'visited' til session variablen flere gange, med f.eks.:
$_SESSION['page1'] .= "visited";

Ellers har du vel noget:
$_SESSION['page2'] = $_SESSION['page1'];

et sted på siden.
Avatar billede aitnemed Novice
08. februar 2011 - 14:44 #2
Hej intenz

Nej, det var da absolut ikke ment som en gætteleg... Sig endelig til, hvis der er nogle oplysninger du mangler.

Jeg har lige prøvet at udkommentere "echo($_SESSION['page2']);" og nu bliver "visited" kun vist en enkelt gang, så jeg vil mene, at det er rimeligt sandsynligt, at det er "echo($_SESSION['page2']);", der er synderen.

Den kode jeg har vist, er den eneste kode på den pågældende side, som afvikler session variabler. Det er derfor, at jeg er fuldstændig tom for ideer... Dvs. intet sted på den pågældende side kan man finde "$_SESSION['page2'] ="

Hele ideen er nemlig, at dette er side 1 og først på side 2 afvikles "$_SESSION['page2'] = 'visited'".
Avatar billede jakobdo Ekspert
08. februar 2011 - 15:34 #3
Har du nogle steder i din kode, hvor du anvender: $page1 = "visited"; ???
Avatar billede intenz Novice
08. februar 2011 - 15:36 #4
Session variabler er jo netop karakteriseret ved, at de er tilgængelige på tværs af siderne.

Hvis $_SESSION['page2'] indeholder en værdi, er det fordi den er sat på et tidspunkt i den givne session. Så hvis du har været inde på 'page2' på et tidspunkt i sessionen, vil dataet blive husket på alle andre sider i sessionen.

Prøv evt. at luk browseren, og start den igen for at genstarte sessionen.

Hvis du så går ind på din side, og den vises korrekt første gang (1xvisited) og ikke korrekt når du genindlæser (2xvisited), er det fordi du sætter $_SESSION['page2'] et sted på siden.

Det kan selvfølgelig også være i diverse filer du include'er i din fil.

Jeg skrev gætteleg, da fejlen uden tvivl er, at du har sat variablen på et tidspunkt i sessionen. Spørgsmålet er derfor hvor du har sat den, hvilket kun kan være et gæt.
Avatar billede aitnemed Novice
08. februar 2011 - 16:24 #5
Det skal lige siges, at jeg bruger Firefox mens jeg laver det her. Da jeg stødte på problemet første gang, slettede jeg den pågældende session i Firefox (Funktioner|Indstillinger|Vis Cookies) men selv med en "ren" session (sletning via Cookies og genstartet browser) sker det stadig.

Kan også lige tilføje, at jeg kører det via Wordpress, men har lavet en unik header til side 1, en unik header til side 2 og en unik header til side 3 (længere forklaring).

Ideen er, at jeg har en test bestående af 3 sider og testens rækkefølge hedder side1 --> side2 --> side3.

Koden jeg bøvler med skal sikre, at folk kun deltager én gang OG at de starter ved side1.

I headeren til side1:
session_start();
$_SESSION['page1'] = "visited";
echo($_SESSION['page1']);
echo($_SESSION['page2']);

//Tjek om brugeren allerede har gennemført testen

if(isset($_COOKIE["completedSurvey"])){
    header("Location: http://www.onlinekonsulenten.dk/speciale/begraensning/");
    }


I headeren til side2:
session_start();

//Tjek om brugeren allerede har gennemført testen

if(isset($_COOKIE["completedSurvey"])){
    header("Location: http://www.minwebside.dk/side1/begraensning/");
    }

else{
    if(isset($_SESSION['page1'])){

            //Hvis brugeren har set side1, så må han gerne se side2

        if($_SESSION['page1'] == "visited")
        {
        //Siden vises - der redirectes ikke
        $_SESSION['page2'] = "visited"; //Husk at brugeren har set side2
        }
        else
        {
            header("Location: http://www.minwebside.dk/side1/"); //Redirect til side 1
        }
    }
    else
    {
        header("Location: http://www.minwebside.dk/side1/"); //Redirect til side 1
        }
}


I headeren til side 3:

session_start();

if(isset($_SESSION['page1']) && isset($_SESSION['page2'])){

//Hvis brugeren har set side1 OG side2, så må han gerne se side3

    if($_SESSION['page1'] == "visited" && $_SESSION['page2'] == "visited")
    {
        //Brugeren har gennemført testen og dette skal huskes

        setcookie("completedSurvey", 'completed', time()+(60*60*24*60), "/");
    }
    else
    {
        header("Location: http://www.minwebside.dk/side1/"); //Redirect til side 1
    }
}
else
{
    header("Location: http://www.minwebside.dk/side1/"); //Redirect til side 1
    }



Dette er den totale hjemmelavede kode, jeg benytter mig af... Dvs. ingen andre steder opdaterer jeg $_SESSION['page2'] - KUN på side 2.

Der hvor jeg står af er, at selv med med en frisk session, så får "$_SESSION['page2']" tildelt "visited", selv hvis man kun har set side1, bare ved at man genindlæser den.
Avatar billede intenz Novice
08. februar 2011 - 21:06 #6
Så må det være her den ligger:
$_SESSION['page2'] = "visited"; //Husk at brugeren har set side2

Man kunne måske forestille sig, at begge headers blev inkluderet automatisk uanset hvilken du benytter.

Prøv evt. at udskrive noget i toppen af hver side, og se om de begge bliver include'd af wordpress.
Avatar billede aitnemed Novice
08. februar 2011 - 22:21 #7
Har søgt på nettet, og det kan tyde på, at det er Wordpress, der er synderen. Der er i hvertfald mange, som ikke kan få sessions til at virke - ved bare ikke helt, om det er det, som er mit problem.

Jeg kan jo godt aktivere sessions, det er bare siderne, som på mystisk vis blandes sammen.

Prøvede din test:

$testVar = "side2";
echo ($testVar);

Ovenstående blev tilføjet lige efter session_start(); på side2... Intet output på side1 der fra - stadig kun "visitedvisited".
Avatar billede aitnemed Novice
18. februar 2011 - 09:20 #8
Intenz smid et svar, så får du point.

Det var selvfølgelig Wordpress, der drillede. Var nødt til at droppe CMS-tilgangen og måtte kode siderne/indholdet fra bunden - og der virkede min oprindelige tilgang helt fint.
Avatar billede intenz Novice
18. februar 2011 - 11:18 #9
Okay :)
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