Goede avond,
Ik heb een website gemaakt met een inlogsysteem. Dat systeem heeft voorheen goed gewerkt en werkt lokaal nog steeds zoals het hoort te werken. Lokaal heb ik het getest op 4 pc's, met een succesvol resultaat.
(Daar komtie...)
Maarrrr..... wanneer iemand extern probeert in te loggen gaat het niet goed. Althans, het inloggen gaat prima, maar zodra dr op een link wordt geklikt, waarna hij de sessie/cookie/registratie in db checkt, knalt hij er weer uit(!). Sommige krijgen de extra functionaliteit te zien, sommige niet. Diegene die de extra functionaliteit te zien krijgen en dr op klikken worden weer teruggestuurd naar de login pagina.
Vermoedelijk ligt het aan de cookies/sessie die niet goed geregistreerd worden. De users staan wél juist in de database, in de login tabel. Dát wordt dus wel goed geregistreerd.
Kunnen jullie voor mij achterhalen waarom de loginfunctie wél lokaal (op 4 pc's) werkt maar niet extern? Alvast hartelijke dank!
Bij elke beveiligde pagina:
De check_login()
de functie connectdb()
Hij maakt wel gewoon prima connectie met de databae, daar ligt het probleem niet. Ter informatie is de functie toch even bijgevoegd.
Ik heb een website gemaakt met een inlogsysteem. Dat systeem heeft voorheen goed gewerkt en werkt lokaal nog steeds zoals het hoort te werken. Lokaal heb ik het getest op 4 pc's, met een succesvol resultaat.
(Daar komtie...)
Maarrrr..... wanneer iemand extern probeert in te loggen gaat het niet goed. Althans, het inloggen gaat prima, maar zodra dr op een link wordt geklikt, waarna hij de sessie/cookie/registratie in db checkt, knalt hij er weer uit(!). Sommige krijgen de extra functionaliteit te zien, sommige niet. Diegene die de extra functionaliteit te zien krijgen en dr op klikken worden weer teruggestuurd naar de login pagina.
Vermoedelijk ligt het aan de cookies/sessie die niet goed geregistreerd worden. De users staan wél juist in de database, in de login tabel. Dát wordt dus wel goed geregistreerd.
Kunnen jullie voor mij achterhalen waarom de loginfunctie wél lokaal (op 4 pc's) werkt maar niet extern? Alvast hartelijke dank!
Bij elke beveiligde pagina:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <? if(FALSE!==($rDbConn=connectdb())) { if(!check_login($rDbConn)) { header('location: login.php'); exit; } // inhoud mysql_close($rDbConn); } ob_end_flush(); ?> |
De check_login()
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
| <? function check_login($rDbConn) { $bLogin=FALSE; if(empty($_SESSION['ingelogd'])) { //niet aangemeld volgens sessie, wel volgens db? if(isset($_COOKIE['user_id']) && isset($_COOKIE['validate']) && strlen($_COOKIE['validate'])==32 && preg_match('/^[0-9]{1,8}$/',$_COOKIE['user_id']) && preg_match( '/^[a-f0-9]{32}$/',$_COOKIE['validate'])) { //de cookies bestaan en zijn geldig, kijken in de db $sQuery='SELECT COUNT(1) FROM logins WHERE user_id='.$_COOKIE['user_id'].' AND validate="'.$_COOKIE['validate'].'" AND client_ip="'.$_SERVER['REMOTE_ADDR'].'" AND tijdstip>DATE_SUB(NOW(),INTERVAL 7 DAY)'; if(!$rResult=mysql_query($sQuery,$rDbConn)) { echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery; } else { if(mysql_result($rResult,0,0)==1) { $bLogin=TRUE; //de sessie gegevens schrijven $_SESSION['ingelogd']=TRUE; $_SESSION['client_ip']=$_SERVER['REMOTE_ADDR']; $_SESSION['user_id']=$_COOKIE['user_id']; //willekeurige string maken $sValidate=md5(rand(0,99999)); //cookies setten voor 7dagen setcookie('validate',$sValidate,time()+60*60*24*7,'/','sub.domein.nl'); setcookie('user_id',$_SESSION['user_id'],time()+60*60*24*7,'/','sub.domein.nl'); //de gegevens in de tabel zetten $sQuery='REPLACE INTO logins (tijdstip, validate, user_id, client_ip) VALUES (NOW(), "'.$sValidate.'", '.$_SESSION['user_id'].', "'.$_SERVER['REMOTE_ADDR'].'")'; if(!mysql_query($sQuery,$rDbConn)) { echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery; } clean_up($rDbConn); return $bLogin; } } } } elseif(isset($_SESSION['client_ip']) && $_SESSION['client_ip']==$_SERVER['REMOTE_ADDR'] && isset($_SESSION['user_id']) && preg_match('/^[0-9]{1,8}$/',$_SESSION['user_id']) && isset($_SESSION['ingelogd']) && $_SESSION['ingelogd']===TRUE) // echo "client ip: '".$_SESSION['client_ip']." ' "; { return TRUE; } return FALSE; } ?> |
de functie connectdb()
Hij maakt wel gewoon prima connectie met de databae, daar ligt het probleem niet. Ter informatie is de functie toch even bijgevoegd.
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
| <? function connectdb() { //inloggegevens van de database $sHost='localhost'; $sUser='**'; $sPass='**'; $sDb='ek2008'; if(!$rDbConn=mysql_connect($sHost,$sUser,$sPass)) { echo 'Kon niet verbinden met de databaseserver'; return FALSE; } else { if(!mysql_select_db($sDb,$rDbConn)) { echo 'Kon de database niet selecteren'; return FALSE; } } return $rDbConn; } ?> |
Proud member of the Cosmic Cows