Inloggen met sessions
Dit is mijn check_login.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/
if ($wachtwoord = $wachtwoord_db AND $nickname = $nickname_db) {
// Login gelukt, sessie variabelen instellen
session_start();
$_SESSION["user_id"] = $id;
$_SESSION["user_nickname"] = $nickname;
$_SESSION["user_pass"] = $wachtwoord;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
} else {
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/
if ($wachtwoord = $wachtwoord_db AND $nickname = $nickname_db) {
// Login gelukt, sessie variabelen instellen
session_start();
$_SESSION["user_id"] = $id;
$_SESSION["user_nickname"] = $nickname;
$_SESSION["user_pass"] = $wachtwoord;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
} else {
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
Op elke andere pagina van de website staat session_start(); helemaal bovenaan. Is mijn code tot zo ver goed?
Verder wil ik nog weten hoe ik nou de variabelen van de sessie weer opvraag. Kan dat met $_SESSION["variabele"] of gewoon met $variabele?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/
if ($wachtwoord = $wachtwoord_db && $nickname = $nickname_db) {
// Login gelukt, sessie variabelen instellen
$_SESSION['user_id'] = $id;
$_SESSION['user_nickname'] = $nickname;
$_SESSION['user_pass'] = $wachtwoord;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
} else {
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/
if ($wachtwoord = $wachtwoord_db && $nickname = $nickname_db) {
// Login gelukt, sessie variabelen instellen
$_SESSION['user_id'] = $id;
$_SESSION['user_nickname'] = $nickname;
$_SESSION['user_pass'] = $wachtwoord;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
} else {
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
Dat zou moeten lukken. Let er wel op dat je geen output hebt voor je de headers aanroept.
Je roept ze aan met $_SESSION['variabele'].
'&&' blijft ook zwart, herkent het script de tekens dan niet?
$result ='SELECT user_id, user_nickname FROM tabel WHERE user_nickname = '.$_POST['wachtwoord'].' AND user_nickname = '.$_POST['nickname'].' LIMIT 0.1';
if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_nickname'] = $row['nickname'];
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
}else{
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
en && is hetzelfde als AND
Gewijzigd op 23/11/2004 13:54:00 door Thijs -
Nu kom ik steeds terug bij het inlogformulier (op index.php), wat ik ook invul.. Maar de query werkt wel. Als ik deze uitvoer in phpMyAdmin en op de plaats van $_POST['wachtwoord'] en $_POST['nickname'] een goed ww + nickname invul geeft hij zoals 't moet 1 rij terug.
$result =\'SELECT user_id, user_nickname FROM tabel WHERE user_pass = \\\'\'.$_POST[\'wachtwoord\'].\'\\\' AND user_nickname = \\\'\'.$_POST[\'nickname\'].\'\\\' LIMIT 0.1\';
if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION[\'user_id\'] = $row[\'id\'];
$_SESSION[\'user_nickname\'] = $row[\'nickname\'];
// en ga direct naar het profiel van de gebruiker
header(\"Location: profiel.php\");
}else{
// Login mislukt
header(\"Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.\");
}
je weet zeker dat de namen van je formulieren kloppen met de $_POST data dus je input vakje van gebruikersnaam heeft de naam nickname enz.
Hier de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
// db connectie e.d.
$result = mysql_query("SELECT id, user_level, geslacht FROM users WHERE nickname = '".$_POST['nickname']."' AND wachtwoord = '".$_POST['pass']."' LIMIT 0,1");
if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_level'] = $row['user_level'];
$_SESSION['user_geslacht'] = $row['geslacht'];
$_SESSION['user_ingelogd'] = 1;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
}else{
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
// db connectie e.d.
$result = mysql_query("SELECT id, user_level, geslacht FROM users WHERE nickname = '".$_POST['nickname']."' AND wachtwoord = '".$_POST['pass']."' LIMIT 0,1");
if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_level'] = $row['user_level'];
$_SESSION['user_geslacht'] = $row['geslacht'];
$_SESSION['user_ingelogd'] = 1;
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
}else{
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}
?>
Het enige wat nu nog niet gebeurd is het meesturen van de variabelen. In profiel.php wordt bv. geen user_id weergegeven als ik die oproep met $_SESSION['user_id'];
Gewijzigd op 23/11/2004 15:02:00 door Dennis
Bovenstaande code staat nog steeds in mn .php. De query geeft het juiste resultaat terug (dus nick + ww kloppen, anders ga je terug en zie je een foutmelding), je komt daarna ook op profiel.php, alleen zijn de variabelen niet meegestuurd. Waar ligt dit aan?
je moet natuurlijk overal session_start(); boven hebben staan
ja zover was ik al ;) op elk document staat session_start(); helemaal bovenaan
login.php
----------------
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();
$ipadres = $REMOTE_ADDR;
if (!empty($_POST)){
include("..\data.php");
$gebruikernaam = $gebruikernaam;
$wachtwoord = $wachtwoord;
$sql = mysql_query("SELECT * FROM gebruiker WHERE gebruiker_naam='$gebruikernaam'");
while($res = mysql_fetch_array($sql)){
$gebruikernaamdb = "$res[gebruiker_naam]";
$wachtwoorddb = "$res[gebruiker_wachtwoord]";
}
if(($gebruikernaam == $gebruikernaamdb) AND ($wachtwoord == $wachtwoorddb)){
$_SESSION['gebruikernaam'] = $gebruikernaam;
$_SESSION['ipadres'] = $ipadres;
echo "<meta http-equiv='refresh' content='0; url=logged.php'>";
}
else{
echo "Controleer u wachtwoord en gebruikersnaam"; }
}
else{
echo "U moet wel wat invullen";
}
?>
session_start();
$ipadres = $REMOTE_ADDR;
if (!empty($_POST)){
include("..\data.php");
$gebruikernaam = $gebruikernaam;
$wachtwoord = $wachtwoord;
$sql = mysql_query("SELECT * FROM gebruiker WHERE gebruiker_naam='$gebruikernaam'");
while($res = mysql_fetch_array($sql)){
$gebruikernaamdb = "$res[gebruiker_naam]";
$wachtwoorddb = "$res[gebruiker_wachtwoord]";
}
if(($gebruikernaam == $gebruikernaamdb) AND ($wachtwoord == $wachtwoorddb)){
$_SESSION['gebruikernaam'] = $gebruikernaam;
$_SESSION['ipadres'] = $ipadres;
echo "<meta http-equiv='refresh' content='0; url=logged.php'>";
}
else{
echo "Controleer u wachtwoord en gebruikersnaam"; }
}
else{
echo "U moet wel wat invullen";
}
?>
<form method="post" action=>
naam:<input type="tekst" name="gebruikernaam">
w8woord:<input type="password" name="wachtwoord">
<input type="submit" name="toevoegen" value="Inloggen" >
</form>
afmelden.php
-------------------------
<a href="login.php">Inloggen</a>
logged.php
---------------------
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start();
$ip = $REMOTE_ADDR;
if( ($ip == $_SESSION[ipadres]) AND ($gebruikernaam == $_SESSION[gebruikernaam])){
echo "U bent ingelogd als $gebruikernaam";
}
else {
echo "<meta http-equiv='refresh' content='0; url=login.php'>";
}
?>
session_start();
$ip = $REMOTE_ADDR;
if( ($ip == $_SESSION[ipadres]) AND ($gebruikernaam == $_SESSION[gebruikernaam])){
echo "U bent ingelogd als $gebruikernaam";
}
else {
echo "<meta http-equiv='refresh' content='0; url=login.php'>";
}
?>
<a href="afmelden.php">Afmelden</a>
Heb het in 3 paginas ingedeeld, het kan natuurlijk ook in 1 of 2 paginas. De logged.php moet bij elke beveiligde pagina boven aan de tekst komen met include.
Ook handig om te weten is, dat session_start(); altijd als eerste vermeld moet worde in een php pagina.