SESSION
ik probeer middels session_start() een website te beveiligen maar ik snap er niets van. Ik heb geprobeert een SID code achter een relatieve URL te plakken met htmlspecialchars(SID) en dan wilde ik die op de volgende pagina checken met de sid uit de _SESSIONS[] array.
Maar er komt geen code achter de URL van de volgende pagina te staan.
Dus ..
Hoe haal ik die SID code er dan uit? Of ben ik gewoon weer helemaal verkeerd bezig en moet ik het gewoon anders doen?
Wat ik doe: wanneer men inlogt, wordt er een unieke code voor hem/haar aangemaakt en in de database (tabel: 'sessies' bijv.) gestopt samen met een datum en het gebruiker id. Daarnaast krijgt $_COOKIE['code'] dezelfde code toegewezen, en $_SESSION['user_id'] krijgt het id van de gebruiker. Op iedere pagina (of op je index.php als je pagina's include) controleer je bovenaan of $_COOKIE['code'] gezet is. Als dat zo is, zoek je in de database naar de juiste sessie. Controleer de codes en geef $_SESSION['user_id'] het bijbehorende id uit de database (& update de datum). Op je website kun je nu via $_SESSION['user_id'] zien of een gebruiker is ingelogd, en kun je ook bepaalde informatie over een gebruiker uit de database halen. Ondertussen blijft hij/zij net zolang ingelogd als dat $_COOKIE['code'] de code heeft uit de database.
Je kunt er dan nog een extra check op zetten die bijv. alle sessies met een datum langer dan 30 minuten geleden verwijdert. Houd dan wel in de gaten als je ook nog opslaat of iemand onthouden moet worden, deze moet dan dus niet verwijderd worden!
Ik hoop dat je het een beetje snapt, misschien iets te beknopt uitgelegd, maar ja. Ik hoor het wel ;).
En is dat cookie dan voor zodat mensen de volgende keer hun wachtwoord niet meer hoeven in te typen en automatisch inloggen?
Op "index.php" wil ik checken of er een cookie is en zo ja dan moet tie automatisch inloggen en naar de volgende pagina.
Als er geen cookie is dan include hij "login.php" (voor handmatige login)
Als de login succesvol is dan moet er een cookie opgeslagen worden met dezelfde code als in de database .. en naar volgende pagina.
Om het makkelijk te houden heb ik geen SESSIONS of tijd gebruikt.
INDEX
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if (isset($_COOKIE['code']))
{
/////////////////////////////////////////////////////////////////////////////////////////
require "includes/db_connect.php";
/////////////////////////////////////////////////////////////////////////////////////////
$code = $_COOKIE['code'];
$gebruikerBestaat = mysql_query('SELECT gebruikersnaam FROM leden WHERE code = \''.$code.'\' LIMIT 1 ');
$gebruikersnaam = mysql_result($gebruikerBestaat,0);
if(mysql_num_rows($gebruikerBestaat)!=0)
{
echo "<script>document.location.href=\"volgende pagina\";</script>";
}
}
else {
/////////////////////////////////////////////////////////////////////////////////////////
require "login.php";
/////////////////////////////////////////////////////////////////////////////////////////
}
?>
if (isset($_COOKIE['code']))
{
/////////////////////////////////////////////////////////////////////////////////////////
require "includes/db_connect.php";
/////////////////////////////////////////////////////////////////////////////////////////
$code = $_COOKIE['code'];
$gebruikerBestaat = mysql_query('SELECT gebruikersnaam FROM leden WHERE code = \''.$code.'\' LIMIT 1 ');
$gebruikersnaam = mysql_result($gebruikerBestaat,0);
if(mysql_num_rows($gebruikerBestaat)!=0)
{
echo "<script>document.location.href=\"volgende pagina\";</script>";
}
}
else {
/////////////////////////////////////////////////////////////////////////////////////////
require "login.php";
/////////////////////////////////////////////////////////////////////////////////////////
}
?>
LOGIN
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
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
<?php
if(!empty($_POST['gebruikersnaam']) && !empty($_POST['wachtwoord']))
{
$gebruikersnaam = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
/////////////////////////////////////////////////////////////////////////////////
require "includes/db_connect.php";
/////////////////////////////////////////////////////////////////////////////////
function create_regcode(){ return (md5(microtime() . rand(10000, 32000)));}
$code = create_regcode();
$gebruikerBestaat = mysql_query('SELECT * FROM leden WHERE gebruikersnaam = \''.$gebruikersnaam.'\' AND wachtwoord = \''.$wachtwoord.'\' LIMIT 1 ');
if(mysql_num_rows($gebruikerBestaat)!=0)
{
$_COOKIE['gebruikersnaam'] = $gebruikersnaam;
$_COOKIE['code'] = $code;
setcookie('code',$code);
mysql_query('UPDATE leden SET code=\''.$code.'\' WHERE gebruikersnaam=\''.$gebruikersnaam.'\' AND wachtwoord=\''.$wachtwoord.'\'');
echo "<script>document.location.href=\"volgende pagina\";</script>";
}
else {echo "onjuiste gebruikersnaam wachtwoord combinatie.";}
}
else {$gebruikersnaam = ""; $wachtwoord = "";}
?>
if(!empty($_POST['gebruikersnaam']) && !empty($_POST['wachtwoord']))
{
$gebruikersnaam = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
/////////////////////////////////////////////////////////////////////////////////
require "includes/db_connect.php";
/////////////////////////////////////////////////////////////////////////////////
function create_regcode(){ return (md5(microtime() . rand(10000, 32000)));}
$code = create_regcode();
$gebruikerBestaat = mysql_query('SELECT * FROM leden WHERE gebruikersnaam = \''.$gebruikersnaam.'\' AND wachtwoord = \''.$wachtwoord.'\' LIMIT 1 ');
if(mysql_num_rows($gebruikerBestaat)!=0)
{
$_COOKIE['gebruikersnaam'] = $gebruikersnaam;
$_COOKIE['code'] = $code;
setcookie('code',$code);
mysql_query('UPDATE leden SET code=\''.$code.'\' WHERE gebruikersnaam=\''.$gebruikersnaam.'\' AND wachtwoord=\''.$wachtwoord.'\'');
echo "<script>document.location.href=\"volgende pagina\";</script>";
}
else {echo "onjuiste gebruikersnaam wachtwoord combinatie.";}
}
else {$gebruikersnaam = ""; $wachtwoord = "";}
?>
Of zou het aan die EasyPHP software kunnen liggen die ik gebruik?
Gewijzigd op 01/01/1970 01:00:00 door repelsteeltje
Nu heb ik voor de gebruikersnaam dus ook een cookie opgeslagen.
Ik gebruik nu dus een setcookie('code'.. en een setcookie('gebruikersnaam'..
Bestaat er ook nog zoiets als setcookie('code' & 'gebruikersnaam') ?
en..
Waar worden die cookies opgeslagen? Ik vind ze niet in;
C:\Documents and Settings\username\Cookies
SanThe schreef op 08.10.2009 08:03:
Edit: Je script is lek => SQL-Injection.
Ow jeetje kan dat ook al .. en wat kunnen we daar dan aan doen? injection?
repelsteeltje schreef op 08.10.2009 16:32:
Ow jeetje kan dat ook al .. en wat kunnen we daar dan aan doen? injection?
SanThe schreef op 08.10.2009 08:03:
Edit: Je script is lek => SQL-Injection.
Ow jeetje kan dat ook al .. en wat kunnen we daar dan aan doen? injection?
Maak gebruik van mysql_real_escape_string en voor eventuele andere filters.
Maar begrijp ik het nu goed, dat ik voor iedere pagina die ik include of in een frame laad, ik met de database moet checken of de gebruiker echt bestaat?
Of kan dat eenvoudiger?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$gebruikerBestaat = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam = '".$gebruikersnaam."'
AND wachtwoord = '".$wachtwoord."' LIMIT 1 ");
if(mysql_num_rows($gebruikerBestaat)!=0)
{
$_COOKIE['gebruikersnaam'] = $gebruikersnaam;
$_COOKIE['code'] = $code;
$_SESSION['ingelogd'] = 1;
}
?>
$gebruikerBestaat = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam = '".$gebruikersnaam."'
AND wachtwoord = '".$wachtwoord."' LIMIT 1 ");
if(mysql_num_rows($gebruikerBestaat)!=0)
{
$_COOKIE['gebruikersnaam'] = $gebruikersnaam;
$_COOKIE['code'] = $code;
$_SESSION['ingelogd'] = 1;
}
?>
vergeet session_start niet bovenaan je pagina te zetten als je sessies gebruikt.
Kijk ook eens naar hoe ik quotes in je query gebruik, zo hoef je niet steeds te escapen (\')
Dus .. ik hoef maar 1 keer met de database te checken? Kan ik dan voor de rest van mijn pagina's vertouwen op die session?
Nou hoop ik wel dat dat session ook gaat werken voor pagina's die in een frame worden geladen.