Op de één of andere manier krijg ik mijn sessies niet aan de praat. (Localhost, xampp, php, mysql)

Hier de relevante stukken uit het index bestand:



<?php
if(!isset($_SESSION)) {
    session_start();
   $_SESSION['id'] = -1;
   $_SESSION['name'] = 'Gast';
   $_SESSION['snaam'] = 'Gast';
}
else session_start();

 error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
 ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)

echo'
			<form method="post" name="login" action="#">
                            Sessie : '; print_r($_SESSION); 
        echo '                   
                            <br><br>
                            <input type="text" name="uname" id="uname" placeholder="Naam" />
                            <input type="text" class="io_error" id="uname_e" style="display:none; color:red; width: 350px; font-weight:bold; font-size:80%">

                            <input type="password" name="upassw" id="upassw" placeholder="Paswoord" />
                            <input type="text" class="io_error" id="upassw_e" style="display:none; color:red; width: 350px; font-weight:bold; font-size:80%">
                            <br>
                            <input type="button" value="Inloggen" id="btn_login" name="btn_login" class="button small" onClick="mylogin()"><br><br>
        <!--
        <a href="inloggen.php" class="button small">Inloggen</a><br><br>
        -->
                            <a href="index.php?p=reg&w=banner" style="float:left;">Registreren </a>
                            <a href="index.php?p=pwv&w=banner" style="float:right;">Paswoord vergeten </a>
			</form> ';  }
    else 
        echo'           <header class="major">
                            <h2>Welkom, '.$_SESSION['name'].'</h2>
			</header>
			<form method="post" name="logout" action="#">
                                Sessie : <?php print_r($_SESSION) ?><br><br>
                        <br>
                            <a href="Uitloggen.php.php" class="button small">Uitloggen</a><br><br>
			</form> ';



Het javascript: (De alerts worden getoond)



function mylogin()
{
    var data = {
        "naam"      : $("#uname").val(),
        "pw"        : $("#upassw").val(),
        "actie"     : "login"
    };
    
alert('In loginscript');

$.ajax('mijnajax.php', {
    type        : "POST",
    dataType    : 'json',
    data        : data,
    success     : function (data, status, xhr) {
                   alert('data terug : ' + data);
//                    data.forEach(function(item, index, object) {
//                        alert(this.index+' : '+this.item)
//                    });
                    $('.io_error').css("display","none");
                    if (data['errors']['gelukt'] === 'nee')    {
                        for(var index in data) {
                            if (index != 'gelukt')  {
                                alert( index + " : " + data[index]+' ; #'+index);
                                $('#'+index).css("display","block");
                                $('#'+index).val(data[index]);
                            }
                        }
                   }
                    else alert('Gelukt');
               },
   
    error       : function(XMLHttpRequest, textStatus, errorThrown) {
                        alert("some error"+ errorThrown);
                    },
//    always      : alert('Break')
    });
}



Mijnajax.pph, aangepast om de sessies te testen


<?php

if(!isset($_SESSION)) {
    session_start();
   $_SESSION['id'] = -1;
   $_SESSION['name'] = 'Gast';
   $_SESSION['snaam'] = 'Gast';
}
else session_start();

$_SESSION['id'] = 9999;
$_SESSION['name'] = 'testnaam' ;
$_SESSION['snaam'] = 'schermnaam';

$data['id'] = 9999;
$data['name'] = 'testnaam';
$data['snaam'] = 'schermnaam';
$data['errors']['gelukt'] = 'ja';
echo json_encode($data);

?>


Wanneer ik op inloggen klik verwacht ik dat de sessiegevens aangepast worden. Wanneer ik daarna echter de homepage refresh blijf ik bij de print_r opdracht zien dat er een gast aanwezig is in plaats van dat de sessiegegevens zichtbaar worden welke er in mijnajax in gezet zouden moeten zijn.

Ik ben pas een week of 2 aan het zoeken wat ik fout doe dus ik hoop dat er hier iemand is die mij uit de brand helpt.
Gewoon beginnen 1e regel met session_start();
Vervolgens je variabelen controleren, bijwerken etc.
Laat dat if{} statement weg.

<?php
session_start();
$_SESSION['id'] = -1;
$_SESSION['name'] = 'Gast';
$_SESSION['snaam'] = 'Gast';
?>

Dit gaat fout:
if(!isset($_SESSION)) {
    session_start();
   $_SESSION['id'] = -1;
   $_SESSION['name'] = 'Gast';
   $_SESSION['snaam'] = 'Gast';
}
else session_start();

Je controleert eerst of de sessie al bestaat (nee, want je hebt 'm nog niet gestart). Daarna start je 'm (prima) EN zet alle data op "Gast" (niet prima).

Wat je waarschijnlijk wilt bereiken is:
if(!isset($_SESSION)) session_start(); //sessie starten indien nodig
if(!isset($_SESSION['id'])){ //initialiseer de sessie voor een nieuwe gebruiker
   $_SESSION['id'] = -1;
   $_SESSION['name'] = 'Gast';
   $_SESSION['snaam'] = 'Gast';
}
Als je nou session_start(); altijd bovenaan neerzet in je PHP-code, dan zat je altijd goed.
Bij voorkeur in je script waarmee je begint, zoals vaak je index.php.
if(!isset($_SESSION)) session_start(); //sessie starten indien nodig

kun je simpelweg verkorten tot:
session_start();


Omdat dit (de initiële administratie rondom een sessie) ook verder losstaat van wat je in een script doet zou ik die code ook in een aparte include zetten, en vervolgens includen via require_once(). Dit zorgt er dan vervolgens voor dat als je die snippet op meerdere plaatsen wil invoegen dat deze ook maar 1x ingeladen wordt, en daarmee dus ook maar 1x "vuurt". Hiermee is de isset($_SESSION) controle ook effectief overbodig geworden.

Daarnaast was er misschien ook sprake van het automatisch starten van de sessie (middels de instelling session.auto_start) die mogelijk roet in het eten gooide.

Zoals altijd: Keep It Simple.
Bedankt voor de reacties.

Na het verwijderen van het if-statement werkt het allemaal naar behoren.

Reageren