Toon posts:

[php] Sessie is weg na veranderen pagina

Pagina: 1
Acties:

Onderwerpen


Anoniem: 281519

Topicstarter
Hallo,

Ik een tijdje geleden een inlogscript geschreven. Van de week ben ik weer eens begonnen met wat te spelen met php. Nu heb ik dit inlogscript bijna letterlijk gekopieerd, het enige verschil is dat ik nu gebruik (wil) maken van classes en functies. Nu is echter het probleem, ik kan inloggen, maar wanneer ik naar een andere pagina ga blijkt de sessie weer leeg te zijn. Ik heb het nu al een paar keer na gelopen en ik snap eigenlijk niet wat ik fout doe. Vergeleken met het vorige script en weinig verschil te vinden. Ziet iemand wat ik fout doe?

Hier de relevante code:

Functies:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
            function checkLogin(){
                session_start();
                if(isset($_SESSION['id'])){
                    return true;
                }else {
                    return false;
                }
            }


    function login($user, $password){
            
        $this->connect();
        if(isset($_SESSION['id'])){
            return false;
        }else {

            $user = mysql_real_escape_string($user);
            $pass = mysql_real_escape_string(md5($password));

            $sql = ("SELECT * FROM users WHERE username='" . $user . "' AND pass='" . $pass . "'");
            $uitvoer = mysql_query($sql);
            $controle = mysql_num_rows($uitvoer);

            if ($controle != 0) { //kijk of er een match is gevonden


                while ($record = mysql_fetch_object($uitvoer)) { //haal gegevens uit de DB en stop ze in vars
                    $id = $record->id;
                    $naam = $record->username;
                }

            session_start(); //check. gegevens klopppen. maak sessie aan met de gegevens
                $_SESSION['id'] = $id;
                $_SESSION['naam'] = $naam;
                return true;

            } else {
                return false;
                    
            }}}


Code waarmee ik inlog:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if(isset($_POST['Submit']) && $func->checkLogin()==false) {
    if(empty($_POST['username']) || empty($_POST['password'])) {
        $error = "niet alle velden zijn ingevuld!";
    } else {
        $func->login($_POST['username'],$_POST['password']);
        if( $func->checkLogin() == false) {
            $error = "Foutieve loggingegevens!";
        }
    }

}


Het laatste stukje php staat in een andere file, genaamd index.php, en bovenaan heb ik de class file geinclude en de variable $func aan toegekend.

Alvast bedankt!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-02 15:18
Zet je
PHP:
1
session_start();
eens en maar 1 keer bovenaan in je bestanden. Dus als eerste na de <?php

disjfa - disj·fa (meneer)
disjfa.nl


Anoniem: 26306

disjfa schreef op dinsdag 13 september 2011 @ 21:51:
Zet je
PHP:
1
session_start();
eens en maar 1 keer bovenaan in je bestanden. Dus als eerste na de <?php
Gewoon ergens in je code maar voordat je $_SESSION gebruikt en voordat je output genereert is voldoende.

Voor de rest is dit natuurlijk zo klaar als een klontje. TS roept nergens session_start aan als het géén POST request met het veld 'Submit' betreft, en dan heb je dus inderdaad geen beschikking over de $_SESSION variabelen.

Anoniem: 281519

Topicstarter
Met andere woorden, ik moet de session_start() aanroepen voordat ik ook maar iets met variabelen ga doen. Dat is logisch, maar alsnog krijg ik het niet werkend, terwijl ik nu in de index en in de class bovenaan begin met session_start()

wel krijg ik nu de melding:
Notice: A session had already been started - ignoring session_start() in
Dit is vrij logisch, aangezien ik twee keer de sessie start, 1 keer in de index.php en daarna include ik meteen de class waarin ook een session_start wordt aangeroepen.

Ik heb in de tussentijd nog eens nagelopen wat er fout kan gaan en wanneer ik eenmaal "inlog" en de $_SESSION['naam'] (die tijdens het inloggen wordt toegekend!) probeer te lezen krijg ik de volgende melding:

Notice: Undefined index: naam in ...

Wat ik hier zelf uit op maak: De sessie is wel gestart, maar de variabelen zijn niet gevuld. Ik weet niet zeker of dat het is maar als dat zo is lijkt me dat vreemd aangezien ik tijdens het inloggen dit doe:

PHP:
1
2
$_SESSION['id'] = $id;
$_SESSION['naam'] = $naam;

  • Beatboxx
  • Registratie: April 2010
  • Laatst online: 26-10-2022

Beatboxx

Certified n00b

Verlooptijd?

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11:57

Ventieldopje

I'm not your pal, mate!

Tip: om je fout te vinden probeer je situatie zo klein mogelijk te maken. Probeer dus te constateren of a. de sessie wel gestart wordt, b. je wat naar de sessie kan schrijven (geen login, gewoon heel simpel) en of het er dan ook in blijft staan.

Hier meer info over php sessies, wellicht nuttig ;) http://nl.php.net/manual/en/session.examples.basic.php

[Voor 19% gewijzigd door Ventieldopje op 13-09-2011 22:14]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Anoniem: 281519

Topicstarter
Verlooptijd lijkt mij niet.

Bedankt Ventieldopje, ga ik proberen!

  • ameesters
  • Registratie: Juni 2008
  • Laatst online: 05-01-2022
PHP:
1
2
3
4
5
6
7
8
9
<?php
session_start();

if(!isset($_SESSION['count']))
    $_SESSION['count'] = 0;
else
    $_SESSION['count'] + 1;

echo $_SESSION['count'];


Als hij optelt weet je dat session werken, een klein test scriptje als het waren.

daarnaast kan je ook kijken of een sessie al gestart is, en zo niet starten:
PHP:
1
2
3
<?php
if(!isset($_SESSION)) session_start();
?>


Meschien dat deze voorbeeldjes je een gooi in de goede richting geeft ;)

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11:57

Ventieldopje

I'm not your pal, mate!

ameesters schreef op dinsdag 13 september 2011 @ 22:57:
PHP:
1
2
3
4
5
6
7
8
9
<?php
session_start();

if(!isset($_SESSION['count']))
    $_SESSION['count'] = 0;
else
    $_SESSION['count'] + 1;

echo $_SESSION['count'];


Als hij optelt weet je dat session werken, een klein test scriptje als het waren.

daarnaast kan je ook kijken of een sessie al gestart is, en zo niet starten:
PHP:
1
2
3
<?php
if(!isset($_SESSION)) session_start();
?>


Meschien dat deze voorbeeldjes je een gooi in de goede richting geeft ;)
Wat betreft je eerste code is het altijd nog

PHP:
1
2
<?php
$_SESSION['count'] += 1;


Wat betreft je 2e code, dit lijkt me niet eens nodig en kan alleen maar bugs opleveren (uitroepteken vergeten bijv.). Beter is om gewoon altijd session_start(); aan te roepen bovenaan de pagina aangezien een sessie altijd maar één keer gestart kan worden zal de 2e session_start() (bijv. in een include) genegeert worden en een notice genereren ;) Tenzij je dus session_name gebruikt ;)

@Fulairyn
Zoals ameesters helaas al heeft voor gedaan kun je mooi testen of sessies werken maar van zelf doen leer je veel meer imo ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Anoniem: 281519

Topicstarter
Dank jullie allen,

Ik heb besloten dat ik m'n code helemaal ga nalopen en waar nodig aanpassen.
Ook de functies herschrijven en dergelijke. Dit omdat het op sommige plekken gewoon een rommel is en omdat ik nu ook meer weet wat ik doe. Dit aangezien het om niet al te veel code gaat en ik de fout niet kan vinden (misschien niet hard genoeg gezocht, misschien niet goed gezocht).

Ook snap ik nu beter waar ik mee bezig ben en heb ik me meer in sessie's verdiept, dus zoveel werk zal het niet zijn en het resultaat zal alleen maar beter zijn.

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11:57

Ventieldopje

I'm not your pal, mate!

Heb je code niet gezien verder maar het lijkt me een goed plan, ik leer ook het meeste terwijl ik bezig ben met een project en pak ik het meestal bij een nieuw project beter aan dan de vorige keer ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee