php geen session
Ik heb een bestand op mijn computer staan
index.html
via dit bestand log ik in via json en jquery.
echter als ik probeer te controleren of ik al ben ingelogd krijg ik nee ook al is het ja.
Ik heb eens print_r($_SESSION) gedaan, via element inspecteren kwam ik er achter dat deze leeg was in de gekregen json maar als ik de json.php zelf benader dan is deze dat niet.
Hoe los ik dit op?
Mvg. Knipper
Maar met code kunnen we veel meer, want mijn glazenbol werkt momenteel niet optimaal.
Hoe kun je trouwens in index.html (of in je javascript een print_r() doen? daarmee bedoel je toch de php functie?
index.html (voor op de pc)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!doctype html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>Login</title>
<link rel="stylesheet" href="http://lsite/main/plugin/1.9.2_jquery-ui.css" />
<script src="http://site/main/plugin/jquery-1.8.3.js"></script>
<script src="http://site/main/plugin/1.9.2_jquery-ui.js"></script>
<script src="http://site/login/token.js"></script>
<script>
var token = 'test';
</script>
</head>
<body>
Indien deze tekst blijft staan is er geen verbinding met de server.
</body>
</html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>Login</title>
<link rel="stylesheet" href="http://lsite/main/plugin/1.9.2_jquery-ui.css" />
<script src="http://site/main/plugin/jquery-1.8.3.js"></script>
<script src="http://site/main/plugin/1.9.2_jquery-ui.js"></script>
<script src="http://site/login/token.js"></script>
<script>
var token = 'test';
</script>
</head>
<body>
Indien deze tekst blijft staan is er geen verbinding met de server.
</body>
</html>
token.js
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
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
$(document).ready(function(){
$('body').html('<div># Jquery geladen, verbonden met server</div>');
$('body').append('<div># Inloggen...</div>');
var adapter = "http://site/login/token.php";
$.getJSON( adapter, {
token: token
})
.done(function(data) {
if(data.error == 'NULL') {
if(data.message !== 'NULL') {
$('body').append('<div># ' + data.message + '.</div>');
alert(data.message);
}
if(data.login == 'true') {
$('body').append('<div># Inloggen gelukt.</div>');
$('body').append('<div># Opstarten...</div>');
window.location.replace("http://site");
} else {
$('body').append('<div style="background:rgb(255, 187, 187)"># Inloggen mislukt.</div>');
}
} else {
$('body').append('<div style="background:rgb(255, 187, 187)"># ' + data.error + '</div>');
alert(data.error);
}
})
.fail(function() {
$('body').append('<div style="background:rgb(255, 187, 187)"># Er is een fout opgetreden bij het inloggen.</div>');
alert('Er is een fout opgetreden bij het inloggen.');
});
});
$('body').html('<div># Jquery geladen, verbonden met server</div>');
$('body').append('<div># Inloggen...</div>');
var adapter = "http://site/login/token.php";
$.getJSON( adapter, {
token: token
})
.done(function(data) {
if(data.error == 'NULL') {
if(data.message !== 'NULL') {
$('body').append('<div># ' + data.message + '.</div>');
alert(data.message);
}
if(data.login == 'true') {
$('body').append('<div># Inloggen gelukt.</div>');
$('body').append('<div># Opstarten...</div>');
window.location.replace("http://site");
} else {
$('body').append('<div style="background:rgb(255, 187, 187)"># Inloggen mislukt.</div>');
}
} else {
$('body').append('<div style="background:rgb(255, 187, 187)"># ' + data.error + '</div>');
alert(data.error);
}
})
.fail(function() {
$('body').append('<div style="background:rgb(255, 187, 187)"># Er is een fout opgetreden bij het inloggen.</div>');
alert('Er is een fout opgetreden bij het inloggen.');
});
});
token.php (hier geeft de print_r enkel iets terug als je de pagina zelf opent (niet via js)
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
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
<?php
session_start();
include "../main/instellingen.php";
$data_output = array();
$data_output['error'] = 'NULL';
$data_output['message'] = 'NULL';
$data_output['login'] = 'false';
print_r($_SESSION);
/*=== controleer is er al ingelogd ===*/
if(!isset($_SESSION['gebruikersnaam'])) {
if(!empty($_GET['token'])) {
/*controleer inloghack*/
} else {
$data_output['error'] = 'Niet alle gegevens zijn ingevoerd.';
}
} else {
$data_output['message'] = 'U bent al ingelogd.';
$data_output['login'] = 'true';
}
/*=== output ===*/
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
echo json_encode($data_output);
?>
session_start();
include "../main/instellingen.php";
$data_output = array();
$data_output['error'] = 'NULL';
$data_output['message'] = 'NULL';
$data_output['login'] = 'false';
print_r($_SESSION);
/*=== controleer is er al ingelogd ===*/
if(!isset($_SESSION['gebruikersnaam'])) {
if(!empty($_GET['token'])) {
/*controleer inloghack*/
} else {
$data_output['error'] = 'Niet alle gegevens zijn ingevoerd.';
}
} else {
$data_output['message'] = 'U bent al ingelogd.';
$data_output['login'] = 'true';
}
/*=== output ===*/
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
echo json_encode($data_output);
?>
Je controleert wel of het 'true' is maar dat is het dus niet, begrijp ik?
Wat is dan wel de waarden?
--
of ook:
wat als het is:
als ik de pagina opvraag via de url dan is het true (ervanuitgaande dat ik ook echt ben ingelogd)
en het is dezelfde site? Dus geen andere domeinnaam of zo?
file://c:/user/******/index.html (om in te loggen)
dit laad file
www.site.com/token.js in de head
en deze haalt json op vanaf
www.site.com/token.php?token=***** (token komt uit de index.html)
het zou een "cross-domein" probleem zijn alleen weet ik niet hoe dit op te lossen.
http://site bij adapter
Probeer in token.js eens zonder dan vind hij hem niet
Je kunt geen sessies van de ene server op de andere server lezen.
je logt in op http://www.site.com/login.php
je gaat naar een heel andere site, of desnoods een file op je pc's hd: c:\index.html
daarin laad je weer http://www.site.com/eenjavascript.js
en die javascript verwijst dan weer naar een script op www.site.com.
Maar de vraag is dan, of eenjavascript.js redeneert: /ajax.php staat op www.site.com/ of redeneert: we kijken relatief tov. c:\index.html
Dat zul je kunnen zien als je met firebug meekijkt met de ajaxcall.
Zou hij zo slim zijn om naar www.site.com te kijken, dan moet hij ook nog een session-cookie meesturen, zodat www.site.com snapt dat jij dezelfde bent die zojuist op login.php is ingelogd.
Wat is je uiteindelijke doel eigenlijk? Waarom gebruik je een index.html die op je lokale hd staat?
Alles mislukt echter, de session's en cookies blijven leeg.
Hoe komt het cookie mee met de ajax call en hoe wordt deze cookie bij de vervolg aanroepen meegegeven?
Mogelijk dat de volgorde:
- inloggen
- laden token.js
wel tot gevolg heeft dat de browser weet dat er cookies in het spel zijn?
de json die wordt geladen via javascript zegt niet ingelogd
de json in de browser openen dan ben ik wel ingelogd, hij vind dus de session niet.
Daar kun je dus ook zien of er cookies meegestuurd worden.
via ajax:
en als ik de json meteen laad
hoe kan ik dit oplossen?
www.test.com en toch krijg ik de melding dat ik niet ben ingelogd door mijn session. Hij stuurt dus bij hij gebruikt de session cookie niet. Hoe kan ik dit verhelpen?
ik ben ingelogd op site