SESSION LOGIN
Ik ben bezig met een login systeem doormiddel van SESSIONS. dit allemaal werkt goed. maar wat mij niet wilt lukken zal ik proberen te gaan uitleggen.
Ik heb in de database het volgende staan(voorbeeld):
id, naam, gebruikersnaam, wachtwoord, status
1, jan, jan, test, Admin
als ik ingelogd ben krijg je het volgende te zien:
ingelogd als:
naam: jan
Status: Admin
Uitloggen
dit werkt allemaal nog.
Maar ik wil als je in dit geval inlogt als status admin dat er in het menu een tab bijkomt Admin.
en als je zeg maar als Moderator inlogd er een tab Moderator bij komt
Wat ik denk is dat je moet controleren of degene die is ingelogd ook Admin is als hij dat is moet ik iets doen als dit bij het menu, maar ik heb veel dingen geprobeerd maar kom er echt niet uit
voorbeeld: if(isset($_SESSION["ingelogd"]) = 'Admin') {
hier komt dan het tab menu van admin }
alleen ik weet niet helemaal hoe en wat ik moet doen.
ik hoop dat iemand me op weg kan helpen. ik heb alles op een local host staan dus kan geen online voorbeeld geven. ik hoop dat jullie me snappen. ik plaats wel even de check pagina waar ik de sessie ook start
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
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
<?php // sessie word gestart
session_start();
include'../config/config.php'; // database verbinding
$_SESSION["ingelogd"] = '';
// gebruikers naam en wachtwoord controleren uit database
$sql = "
SELECT
*
FROM
gebruikers
WHERE
Gebruikersnaam ='". $_POST['inloggen']."' and Wachtwoord = '".$_POST['wachtwoord']."'";
$result = mysql_query($sql);
// controleert de sessions zijn ze waar of fout
$aantal = mysql_num_rows($result);
if($aantal == 1) {
$_SESSION["ingelogd"] = TRUE;
$rij = mysql_fetch_array($result);
$_SESSION["naam"] = $rij["Naam"];
$_SESSION["status"] = $rij["Status"];
} else { // bij foute inlog gegevens word u terug gestuurd
$_SESSION["ingelogd"] = FALSE;
}
header("location:../../index.php");
?>
session_start();
include'../config/config.php'; // database verbinding
$_SESSION["ingelogd"] = '';
// gebruikers naam en wachtwoord controleren uit database
$sql = "
SELECT
*
FROM
gebruikers
WHERE
Gebruikersnaam ='". $_POST['inloggen']."' and Wachtwoord = '".$_POST['wachtwoord']."'";
$result = mysql_query($sql);
// controleert de sessions zijn ze waar of fout
$aantal = mysql_num_rows($result);
if($aantal == 1) {
$_SESSION["ingelogd"] = TRUE;
$rij = mysql_fetch_array($result);
$_SESSION["naam"] = $rij["Naam"];
$_SESSION["status"] = $rij["Status"];
} else { // bij foute inlog gegevens word u terug gestuurd
$_SESSION["ingelogd"] = FALSE;
}
header("location:../../index.php");
?>
Ik hoop dat ik zo genoeg informatie heb gegeven
Nu je bezig bent om een goed inlog systeem te maken bent mag ik je dan vragen hoe je de database hebt opgezet ?
Met het oog op het ophalen van het wachtwoord in je query...
- Het is beter om te selecteren wat je wilt hebben en geen * te gebruiken. Dit is voor de snelheid beter, voor de leesbaarheid en het leert je gewoon goede queries te schrijven.
- Dump nooit user data in een sql statement. Gebruik mysql_real_escape_string.
- Sla passwords niet als plain-text op, gooi er nog iets over als sha1 en gebruik een salt!
- Foutafhandeling ontbreekt, bekijk van elke functie die je nu gebruikt wat ze teruggeven en gebruik dat in if statements.
- Als je toch al de assoc manier van mysql_fetch_array gebruikt kan je net zo goed direct mysql_fetch_assoc gebruiken.
Waarom heeft niemand dit nog verteld?
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
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
<?php
$admin = "Admin";
$moderator = "Moderator";
$lid = "Lid";
// rechten voor admin
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $admin) { ?>
<li>
<a href="admin.php">
<span class="linker-tab"></span>
<span class="midden">Admin</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
<?php // rechten voor Moderator
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $moderator) { ?>
<li>
<a href="moderator.php">
<span class="linker-tab"></span>
<span class="midden">Moderator</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
<?php // rechten voor Leden
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $lid) { ?>
<li>
<a href="lid.php">
<span class="linker-tab"></span>
<span class="midden">Lid</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
$admin = "Admin";
$moderator = "Moderator";
$lid = "Lid";
// rechten voor admin
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $admin) { ?>
<li>
<a href="admin.php">
<span class="linker-tab"></span>
<span class="midden">Admin</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
<?php // rechten voor Moderator
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $moderator) { ?>
<li>
<a href="moderator.php">
<span class="linker-tab"></span>
<span class="midden">Moderator</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
<?php // rechten voor Leden
if(isset($_SESSION['ingelogd']) == '') {
}
elseif($_SESSION['ingelogd'] == TRUE and $_SESSION['status'] == $lid) { ?>
<li>
<a href="lid.php">
<span class="linker-tab"></span>
<span class="midden">Lid</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div>
<li>
<a href="profiel.php">
<span class="linker-tab"></span>
<span class="midden">Profiel</span>
<span class="rechter-tab"></span>
</a>
</li>
<div class="split"></div><?php } ?>
nu heb ik alleen nog een vraag als je inlogt als admin krijg je tab admin te zien en als je inlogt als moderator krijg je tab moderator te zien maar ik wil ook als je als een gewone lid inlogt een tab te zien krijgt die heet nu Profiel. maar ik vind dat niet zo goed klinken weet iemand daar een goede naam voor.
maar al wel bedankt voor alle snelle reacties.
Laat dan ipv Profiel daar de naam zien van degene die is ingelogt.
Begin eens met ons uit te leggen wat je gedaan hebt met Karl zijn laatste opmerkingen.
Zoals je nu de mensen laat inloggen, kan ik zonder probleem mezelf inloggen als administrator, zonder het paswoord te kennen (zie mySQL injection).
Jij gaat er van uit:
als $_SESSION['status'] op 'Admin' staat, mag ik (de programmeur) er van uit gaan dat alle rechten aan die client worden gegeven.
Dat is uiteraard compleet zinloos zolang het inloggen op zich niet geregeld is, he.
Kris Peeters op 17/03/2011 15:35:17:
Nee nee, niet zo snel.
Begin eens met ons uit te leggen wat je gedaan hebt met Karl zijn laatste opmerkingen.
Zoals je nu de mensen laat inloggen, kan ik zonder probleem mezelf inloggen als administrator, zonder het paswoord te kennen (zie mySQL injection).
Jij gaat er van uit:
als $_SESSION['status'] op 'Admin' staat, mag ik (de programmeur) er van uit gaan dat alle rechten aan die client worden gegeven.
Dat is uiteraard compleet zinloos zolang het inloggen op zich niet geregeld is, he.
Begin eens met ons uit te leggen wat je gedaan hebt met Karl zijn laatste opmerkingen.
Zoals je nu de mensen laat inloggen, kan ik zonder probleem mezelf inloggen als administrator, zonder het paswoord te kennen (zie mySQL injection).
Jij gaat er van uit:
als $_SESSION['status'] op 'Admin' staat, mag ik (de programmeur) er van uit gaan dat alle rechten aan die client worden gegeven.
Dat is uiteraard compleet zinloos zolang het inloggen op zich niet geregeld is, he.
De leden die nu in de db staan is alleen om te testen straks worden de wachtwoorden md5 gecodeerd ik zal ff kijken naar mySQL injection en ik heb ook als je niet de juiste ww en gebruikersnaam uit de db hebt dat je ook niet kan inloggen
Gewijzigd op 17/03/2011 16:57:23 door Mr Beronne
if(isset($_SESSION['ingelogd']) == '') {
Een isset() geeft true of false terug. Dus hier staat eigenlijk dit:
if(true == '') {
of
if(false == '') {
En geen van beiden zal ooit gelijk zijn aan een lege string.
// rechten voor admin
if(!isset($_SESSION['ingelogd'])) {
}
elseif($_SESSION['ingelogd'] && $_SESSION['status'] == $admin) { ?>
// hier admin menu