Sesies willen niet (Opgelost)
Hier de relevante stukken uit het index bestand:
Code (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?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> ';
[/code]
Het javascript: (De alerts worden getoond)
[code]
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')
});
}
[/code]
Mijnajax.pph, aangepast om de sessies te testen
[code]
[code]<?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.
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> ';
[/code]
Het javascript: (De alerts worden getoond)
[code]
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')
});
}
[/code]
Mijnajax.pph, aangepast om de sessies te testen
[code]
[code]<?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.
Gewijzigd op 27/04/2018 22:29:03 door Pipo Clown
Vervolgens je variabelen controleren, bijwerken etc.
Laat dat if{} statement weg.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
session_start();
$_SESSION['id'] = -1;
$_SESSION['name'] = 'Gast';
$_SESSION['snaam'] = 'Gast';
?>
session_start();
$_SESSION['id'] = -1;
$_SESSION['name'] = 'Gast';
$_SESSION['snaam'] = 'Gast';
?>
Gewijzigd op 27/04/2018 13:35:24 door Aad B
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if(!isset($_SESSION)) {
session_start();
$_SESSION['id'] = -1;
$_SESSION['name'] = 'Gast';
$_SESSION['snaam'] = 'Gast';
}
else session_start();
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
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';
}
if(!isset($_SESSION['id'])){ //initialiseer de sessie voor een nieuwe gebruiker
$_SESSION['id'] = -1;
$_SESSION['name'] = 'Gast';
$_SESSION['snaam'] = 'Gast';
}
Gewijzigd op 27/04/2018 15:40:00 door Rob Doemaarwat
Bij voorkeur in je script waarmee je begint, zoals vaak je index.php.
kun je simpelweg verkorten tot:
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.
Na het verwijderen van het if-statement werkt het allemaal naar behoren.