Inloggen werkt bijna
maar loop nog op 1 klein ding vast.
Na het controleren van alle punten (en ze zijn correct ingevuld)
zou het script je door moeten sturen.
Dit doet hij alleen niet. Ik krijg ook geen foutmelding(en) te zien.
Misschien dat iemand ziet wat er mis is?
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// Als de site online gaat, verander je true in false
// Het makkelijkst is om deze constante op één plaats in te stellen en niet in elk bestand opnieuw.
define('ENABLE_DEBUG', true); // zet op false wanneer online
session_start();
include 'includes/connection.php';
if ('POST' == $_SERVER['REQUEST_METHOD'] and 'login' == $_GET['cmd']) {
// Gebruikersnaam en wachtwoord vergelijken met gegevens in de database
$sSQL = "SELECT
login,
actief,
wachtwoord
FROM
members
WHERE
login = '" . mysql_real_escape_string($_POST['login']) . "'";
$rResult = mysql_query($sSQL, $connection);
// Controleren of de query is gelukt
if (false === $rResult) {
if (defined('ENABLE_DEBUG') and ENABLE_DEBUG) {
echo 'Er ging iets fout met de query (1) op de pagina inloggen.php:' . mysql_error($connection) . '(' . $sSQL . ')';
} else {
echo 'Er is een fout opgetreden probeer het later opnieuw';
}
} else {
// Controleren hoeveel resultaten er zijn
if (1 == mysql_num_rows($rResult)) {
// Er is één resultaat gevonden, dus gegevens fetchen
$row = mysql_fetch_array($rResult);
// Controleren of het account geactiveerd is
if (0 == $row['actief']) {
echo 'Het account is nog niet geactiveerd. Activeer deze eerst.';
}
// controleren of wachtwoord klopt
elseif (md5($_POST['pass']) != $row['wachtwoord']) {
echo 'wachtwoord/gebruikersnaam combinatie klopt niet.';
}
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['remote_addr'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
// Hier gaan we DE persoon uitloggen
if (isset($_GET['cmd']) and 'logout' == $_GET['cmd']) {
$_SESSION['inlogdata']['ingelogd'] = false;
$_SESSION['inlogdata']['remote_addr'] = null;
$_SESSION['inlogdata']['username'] = null;
//echo "Je bent uitgelogd en wordt doorgestuurd"; // Een echo kan niet vóór header()!
header('Location: index.php');
exit; // Script stoppen
}
// Is DE persoon ingelogd en bestaan alle sessies? Dan wordt DE persoon doorgestuurd
if (isset($_SESSION['inlogdata']['ingelogd'], $_SESSION['inlogdata']['remote_addr']) and $_SESSION['inlogdata']['username']) {
// Gebruiker is ingelogd
//echo "Je bent ingelogd, je wordt door gestuurt"; // Een echo kan niet vóór header()!
header('Location: userdashboard.php');
exit; // Script stoppen
} else {
// Controleren of het IP-adres klopt
if ($_SESSION['inlogdata']['remote_addr'] != $_SERVER['REMOTE_ADDR']) {
echo 'Mogelijke hijack!';
}
}
mysql_close($connection);
?>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// Als de site online gaat, verander je true in false
// Het makkelijkst is om deze constante op één plaats in te stellen en niet in elk bestand opnieuw.
define('ENABLE_DEBUG', true); // zet op false wanneer online
session_start();
include 'includes/connection.php';
if ('POST' == $_SERVER['REQUEST_METHOD'] and 'login' == $_GET['cmd']) {
// Gebruikersnaam en wachtwoord vergelijken met gegevens in de database
$sSQL = "SELECT
login,
actief,
wachtwoord
FROM
members
WHERE
login = '" . mysql_real_escape_string($_POST['login']) . "'";
$rResult = mysql_query($sSQL, $connection);
// Controleren of de query is gelukt
if (false === $rResult) {
if (defined('ENABLE_DEBUG') and ENABLE_DEBUG) {
echo 'Er ging iets fout met de query (1) op de pagina inloggen.php:' . mysql_error($connection) . '(' . $sSQL . ')';
} else {
echo 'Er is een fout opgetreden probeer het later opnieuw';
}
} else {
// Controleren hoeveel resultaten er zijn
if (1 == mysql_num_rows($rResult)) {
// Er is één resultaat gevonden, dus gegevens fetchen
$row = mysql_fetch_array($rResult);
// Controleren of het account geactiveerd is
if (0 == $row['actief']) {
echo 'Het account is nog niet geactiveerd. Activeer deze eerst.';
}
// controleren of wachtwoord klopt
elseif (md5($_POST['pass']) != $row['wachtwoord']) {
echo 'wachtwoord/gebruikersnaam combinatie klopt niet.';
}
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['remote_addr'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
// Hier gaan we DE persoon uitloggen
if (isset($_GET['cmd']) and 'logout' == $_GET['cmd']) {
$_SESSION['inlogdata']['ingelogd'] = false;
$_SESSION['inlogdata']['remote_addr'] = null;
$_SESSION['inlogdata']['username'] = null;
//echo "Je bent uitgelogd en wordt doorgestuurd"; // Een echo kan niet vóór header()!
header('Location: index.php');
exit; // Script stoppen
}
// Is DE persoon ingelogd en bestaan alle sessies? Dan wordt DE persoon doorgestuurd
if (isset($_SESSION['inlogdata']['ingelogd'], $_SESSION['inlogdata']['remote_addr']) and $_SESSION['inlogdata']['username']) {
// Gebruiker is ingelogd
//echo "Je bent ingelogd, je wordt door gestuurt"; // Een echo kan niet vóór header()!
header('Location: userdashboard.php');
exit; // Script stoppen
} else {
// Controleren of het IP-adres klopt
if ($_SESSION['inlogdata']['remote_addr'] != $_SERVER['REMOTE_ADDR']) {
echo 'Mogelijke hijack!';
}
}
mysql_close($connection);
?>
- gebruik geen mysql dat word zelfs afgeraden door php zelf, gebruik PDO of mysqli
- gebruik geen md5 maar gebruik een goede hash...
- bij uitloggen gebruikt session_destroy(), session_unset(), $_SESSION = array()
- Waarom controleren op een ip-adres?? (als je bijvoorbeeld op een ipad inlogd en wandeld van bijvoorbeeld school naar de trein dan heb je altijd al een ander ip adres en ip adressen willen op regelmatige basis wel eens wisselen.)
- Wat doet die , op regel 65 daar ?
- geen md5 gebruiken? ik heb wel wat gehoord van sha1 en sha256 maar dat is toch allemaal 1 pot nat?.
- uitloggen zal ik zeker nog eventjes naar kijken
- die , zou de andere sessie moeten koppelen aan die andere om te kijken of hij wel gevult is.
Ik heb hem al vervangen voor and maar ook dat werkt niet.
Ik blijf een lege pagina houden en door sturen doet ie niet.
In je script nagenoeg hetzelfde.
Maar wat let je om even op php.net te kijken naar mysqli_query()?
MD5 heeft niet zo veel mogelijkheden. Veel minder dan een SHA256 met een salt/pepper. Google maar.
En die() verbindt niets, maar laat het script voortijdig stoppen (doodgaan).
Zonder ook maar iets van een verbinding te sluiten, zooi op te ruimen: sterft het af.
Nergens voor nodig!
Regel 65 is heel raar.
Je isset() is prima... en dan komt dit:
Dus $_SESSION['inlogdata']['username'] moet TRUE zijn om door te gaan.
Ik kan me dat niet voorstellen. Kortom, regel 65 is nog niet goed.
in $_SESSION['inlogdata']['remote_addr'] moet het IP van de gebruiker komen te staan.
Daarnaast moet het ip in de sessie overeen komen met het ip van de internet provider
om eventuele hijacking te voorkomen. Als dat ook anders kan hoor ik het graag.
en hoe zou ik die regel anders kunnen doen als ik meer als 1 sessie wil controleren voor ik iemand door stuur?
Gewijzigd op 23/11/2012 20:40:29 door jacco Laan
Jacco Laan op 23/11/2012 20:36:39:
in $_SESSION['inlogdata']['remote_addr'] moet het IP van de gebruiker komen te staan.
Daarnaast moet het ip in de sessie overeen komen met het ip van de internet provider
om eventuele hijacking te voorkomen.
Daarnaast moet het ip in de sessie overeen komen met het ip van de internet provider
om eventuele hijacking te voorkomen.
Dat werkt nooit bij mobieltjes omdat die bij elke handeling een ander ip hebben.
Ik heb nu het hele IP controle eruit gesloopt, blijven er nog 2 sessies over die gecontroleerd moeten worden.
Het probleem blijft het zelfde.
Doorsturen doet ie niet. Ik blijf een lege witte pagina houden na het doorlopen van de voorgaande controles.
Hier mn script opnieuw
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// Als de site online gaat, verander je true in false
// Het makkelijkst is om deze constante op één plaats in te stellen en niet in elk bestand opnieuw.
define('ENABLE_DEBUG', true); // zet op false wanneer online
session_start();
include 'includes/connection.php';
if ('POST' == $_SERVER['REQUEST_METHOD'] and 'login' == $_GET['cmd']) {
// Gebruikersnaam en wachtwoord vergelijken met gegevens in de database
$sSQL = "SELECT
login,
actief,
wachtwoord
FROM
members
WHERE
login = '" . mysql_real_escape_string($_POST['login']) . "'";
$rResult = mysql_query($sSQL, $connection);
// Controleren of de query is gelukt
if (false === $rResult) {
if (defined('ENABLE_DEBUG') and ENABLE_DEBUG) {
echo 'Er ging iets fout met de query (1) op de pagina inloggen.php:' . mysql_error($connection) . '(' . $sSQL . ')';
} else {
echo 'Er is een fout opgetreden probeer het later opnieuw';
}
} else {
// Controleren hoeveel resultaten er zijn
if (1 == mysql_num_rows($rResult)) {
// Er is één resultaat gevonden, dus gegevens fetchen
$row = mysql_fetch_array($rResult);
// Controleren of het account geactiveerd is
if (0 == $row['actief']) {
echo 'Het account is nog niet geactiveerd. Activeer deze eerst.';
}
// controleren of wachtwoord klopt
elseif (md5($_POST['pass']) != $row['wachtwoord']) {
echo 'wachtwoord/gebruikersnaam combinatie klopt niet.';
}
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
// Hier gaan we DE persoon uitloggen
if (isset($_GET['cmd']) and 'logout' == $_GET['cmd']) {
$_SESSION['inlogdata']['ingelogd'] = false;
$_SESSION['inlogdata']['remote_addr'] = null;
$_SESSION['inlogdata']['username'] = null;
//echo "Je bent uitgelogd en wordt doorgestuurd"; // Een echo kan niet vóór header()!
header('Location: index.php');
exit; // Script stoppen
}
// Is DE persoon ingelogd en bestaan alle sessies? Dan wordt DE persoon doorgestuurd
if (isset($_SESSION['inlogdata']['ingelogd']) and isset($_SESSION['inlogdata']['username'])) {
// Gebruiker is ingelogd
//echo "Je bent ingelogd, je wordt door gestuurt"; // Een echo kan niet vóór header()!
header('Location: userdashboard.php');
exit; // Script stoppen
}
mysql_close($connection);
?>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
// Als de site online gaat, verander je true in false
// Het makkelijkst is om deze constante op één plaats in te stellen en niet in elk bestand opnieuw.
define('ENABLE_DEBUG', true); // zet op false wanneer online
session_start();
include 'includes/connection.php';
if ('POST' == $_SERVER['REQUEST_METHOD'] and 'login' == $_GET['cmd']) {
// Gebruikersnaam en wachtwoord vergelijken met gegevens in de database
$sSQL = "SELECT
login,
actief,
wachtwoord
FROM
members
WHERE
login = '" . mysql_real_escape_string($_POST['login']) . "'";
$rResult = mysql_query($sSQL, $connection);
// Controleren of de query is gelukt
if (false === $rResult) {
if (defined('ENABLE_DEBUG') and ENABLE_DEBUG) {
echo 'Er ging iets fout met de query (1) op de pagina inloggen.php:' . mysql_error($connection) . '(' . $sSQL . ')';
} else {
echo 'Er is een fout opgetreden probeer het later opnieuw';
}
} else {
// Controleren hoeveel resultaten er zijn
if (1 == mysql_num_rows($rResult)) {
// Er is één resultaat gevonden, dus gegevens fetchen
$row = mysql_fetch_array($rResult);
// Controleren of het account geactiveerd is
if (0 == $row['actief']) {
echo 'Het account is nog niet geactiveerd. Activeer deze eerst.';
}
// controleren of wachtwoord klopt
elseif (md5($_POST['pass']) != $row['wachtwoord']) {
echo 'wachtwoord/gebruikersnaam combinatie klopt niet.';
}
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
// Hier gaan we DE persoon uitloggen
if (isset($_GET['cmd']) and 'logout' == $_GET['cmd']) {
$_SESSION['inlogdata']['ingelogd'] = false;
$_SESSION['inlogdata']['remote_addr'] = null;
$_SESSION['inlogdata']['username'] = null;
//echo "Je bent uitgelogd en wordt doorgestuurd"; // Een echo kan niet vóór header()!
header('Location: index.php');
exit; // Script stoppen
}
// Is DE persoon ingelogd en bestaan alle sessies? Dan wordt DE persoon doorgestuurd
if (isset($_SESSION['inlogdata']['ingelogd']) and isset($_SESSION['inlogdata']['username'])) {
// Gebruiker is ingelogd
//echo "Je bent ingelogd, je wordt door gestuurt"; // Een echo kan niet vóór header()!
header('Location: userdashboard.php');
exit; // Script stoppen
}
mysql_close($connection);
?>
Zet eens een echo 'klaar'; helemaal onderin je script.
Er gaat dus iets mis maar ik weet niet wat.
Array ( [cmd] => login )
Met POST krijg ik dit op mn scherm:
Array ( [login] => Demo [pass] => 09011984az [submit] => inloggen )
Gewijzigd op 23/11/2012 21:25:00 door jacco Laan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if (1 == mysql_num_rows($rResult)) {
// tussenliggende regels verwijderd
} else {
// dit hoort niet in de else
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
?>
if (1 == mysql_num_rows($rResult)) {
// tussenliggende regels verwijderd
} else {
// dit hoort niet in de else
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
?>
Ook knudde een klein statementje die het hele script omzeep helpt.
Als een leek zag ik het niet.
Deze regels moeten dus een TAB terug:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
?>
} else {
// Alle gegevens kloppen, dus sessie vullen
$_SESSION['inlogdata']['ingelogd'] = true;
$_SESSION['inlogdata']['username'] = $row['login'];
}
}
}
?>