Avatar billede sjaka Nybegynder
14. juni 2007 - 15:38 Der er 14 kommentarer

Problemer med sessions hos one.com

Hej.

Jeg har problemer med at få sessions, (der virker på min webserver hjemme), til at virke hos one.com . Nedenstående er et meget forsimplet eksempel

//Jeg sætter en cookie
//side 1
$_SESSION["admin"] ="hans";

//på en senere side, skal man kunne gøre noget specielt hvis man e r logget ind

if(isset($_SESSION["admin"])){
echo("et eller andet specielt");
}

Det virker som sagt fint på min maskine, hvor jeg kører Apache 2.0.54 og PHP 5.1.2 , men når jeg uploader det til mit webhotel hos one.com, er det som om session'en ikke bliver gemt.

Er der nogen der har en ide om hvad problemet skyldes?
Avatar billede sjaka Nybegynder
14. juni 2007 - 15:40 #1
Derudover - det lader til at de hos one.com kører PHP 5.2.3 . Hvilken webserver de kører, ved jeg ikke
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 17:06 #2
Skriver du session_start(); noget sted?
Avatar billede sjaka Nybegynder
14. juni 2007 - 18:00 #3
ja, den sætter jeg i starten af fil hvori jeg behandler sessions. det er meget mærkeligt.

En af mine gamle bøger har forklaret at jeg burde skrive noget session_register(variabel), men såvidt jeg har forstået, er den blevet forældet til fordel for bare $_SESSION[navn] = variabel .

Det er lidt mærkeligt synes jeg
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 18:03 #4
Den slags gamle bøger skal du smide ud. Eller brænde.

session_start(); skal stå øverst i alle php-filer der håndterer $_SESSION-ting.

Har du et link til siden, og en demo af hvad der går galt?  Evt: lav et minimalt eksempel, der viser problemet.
Avatar billede sjaka Nybegynder
14. juni 2007 - 20:17 #5
Beklager det lange svar - skulle lige spise

Link til siden er
http://www.torstedgymnastik.dk/test/login.php

Men som sagt - det virker fint på min webserver som jeg udvikler sitet på. Problemet opstår når jeg lægger det op på webserveren hos one.

Jeg sætter et par sessionvariabler
$_SESSION["admin"] ="hans";
$_SESSION["niveau"] ="2";

På en anden side, checker jeg for om brugeren skal have mulighed for at se visse menupunkter

if($_SESSION['niveau']>1){+
    printf('<li><a href = "lav_nyhed.php">Opret nyhed</a></li>');
    }

Men selvom jeg har sat $_SESSION['niveau'] = "2" , bliver der ikke checket i dette tilfælde, da linket ikke kommer frem.
Det lader til at session'en forsvinder. Kan det have noget at gøre med noget session-timeout hos ones server?
Avatar billede sjaka Nybegynder
14. juni 2007 - 20:23 #6
jeg sætter variablerne når jeg logger ind. Der er fin forbindelse til databasen og den checker også korrekt op imod brugernavn og kode, da jeg har testet output med diverse printlinjer.
i filen "validerlogin.php", har jeg linjen
//start
if(isset($_SESSION["admin"])){
    printf('Du er nu logget ind!');
    echo('<a href = "login.php" > hej</a>');
    }
//slut
for at se om variablen døde med det samme, men linket bliver fint skrevet ud
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 20:47 #7
Den side, login.php, ser ikke ud til at sætte en session-cookie.
Avatar billede sjaka Nybegynder
14. juni 2007 - 21:06 #8
den henviser til en includefil, hvori jeg sætter
session_start()
så den kommer med :/

Jeg tror stadigvæk det har noget med forskellene på webhotellet, og min webserver at gøre. Jeg ved godt at folk altid skriver at "det virkede igår", men når jeg kører filerne på min webserver, virker det. Når jeg uploader det til ones server og kører det der, virker det ikke.

Meget mærkeligt
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 21:22 #9
Jo, og derfor skal vi have fundet forskellen - eller noget der reparerer den.
Selvfølgelig virker sessioner hos (b-)one - selv om jeg ikke kender noget til dem personligt.

Ud fra de oplysninger du giver, har jeg ikke noget bud - ud over at det må ligge i din kode. Derfor samme forslag som 18:03:17: lav et minimalt eksempel, der viser problemet.
Avatar billede sjaka Nybegynder
14. juni 2007 - 21:37 #10
okay :) - jeg prøver at poste lidt mere kode

filen login.php sender vha. en POST-form to variabler videre - brugernavn og kodeord.

Disse bliver sendt til validerlogin.php

Heri checker jeg om der findes en bruger med det brugernavn og kodeord i databasen. (Ja, jeg har oprettet forbindelse til DB).

//START på validerlogin.php

$brugernavn = $_POST['brugernavn'];
$kodeord = $_POST['kodeord'];

$sql = 'select id, brugernavn, statusen from bruger WHERE brugernavn = "'.$brugernavn.'" AND kodeord = "'.$kodeord.'"';

//I tilfældet at der findes en bruger, køres følgende

$_SESSION["nummer"] = $row[0];
$_SESSION["brugernavn"] = $row[1];
$_SESSION["admin"] =$row[2];
header("Location: login.php");
if(isset($_SESSION["admin"])){
    printf('Du er nu logget ind!');
    echo('<a href = "login.php" > hej</a>');
}
printf($_SESSION["admin"]);
printf('<a href = "nyheder.php">gå herhen</a>');

//SLUT på validerlogin.php

Jeg får følgende ud når jeg logger ind med en bruger som findes i DB
http://torstedgymnastik.dk/test/login_facit01.JPG

Når jeg derefter går hen til siden nyheder.php , findes følgende essentielle kode

//START på nyheder.php

<li><a href="nyheder.php">Seneste nyt</a></li>
<li><a href="nyheder_aeldre.php">Ældre nyheder</a></li>
<li><a href="nyheder_gamle.php">Gamle nyheder</a></li>
<?php
if(isset($_SESSION['admin'])){ //Først checkes for om sessionsvariablen "status" eksisterer

if($_SESSION['admin']>"1"){ //Dernæst om værdien er over 1
    printf("<li><br /></li>");
    printf('<li><a href = "admin_opret_nyhed.php">Opret nyhed</a></li>');
    }
}
?>
//SLUT på nyheder.php

Der møder følgende skærmbillede mig:
http://torstedgymnastik.dk/test/login_facit02_fejl.JPG

Her burde være en ekstra linje i menuen til venstre, hvor man kunne gå hen til admin_opret_nyhed.php , men det er der ikke.

Skriv bare hvis der er behov for mere kode
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 22:10 #11
Ja, det hele - det interessante er ikke i det du viser her. Eller rettere nej: lav et minimalt eksempel.
Avatar billede sjaka Nybegynder
14. juni 2007 - 22:19 #12
jeg troede det VAR et minimalt eksempel og at det jeg skrev var det interessante :) .

er det i orden hvis jeg tager den op om et par dage igen? det er småsent og jeg har en tidlig dag i morgen.

Alt andet lige - mange tak for hjælpen indtil nu :)
Avatar billede erikjacobsen Ekspert
14. juni 2007 - 22:24 #13
Det interessante er placering af session_start(); og hvorvidt sessionen overlever til næste side. Det tager ganske få linier at konstatere, om det helt generelt virker hos (b-)one. Det gør det jo nok - de har da ganske mange kunder.

Når det er konstateret må du kigge din kode igennem - helst selv, det er sjovest for dig - for at se om du overtræder nogle regler.

Der er adskillige, hundreder sikkert, indstillinger i PHP og Apache der kan varierer åp forskellige webservere. Men fornuftig og robust programmering kan man komme uden om mange af dem.

Du vender bare tilbage når du har tid igen ;)
Avatar billede magnusbm Nybegynder
06. juli 2007 - 16:56 #14
Hej hvad med at starte den sådan her, det virker hos mig:

<?php
ob_start(); //Start output buffering
session_start();

$_SESSION['test'] = "test";

ob_end_flush(); //Slå output buffering fra
?>
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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