afschermen persoonlijke pagina
Ik heb een inlog script op mijn site staan, waar gebruiker X na het inloggen op een persoonlijke pagina komt - pagina_X.php bijv..
Dit werkt allemaal prima, er is alleen één maar!
Wanneer gebruiker X ingelogd is, kan deze door simpelweg de URL te veranderen naar bijv. pagina_Y.php op de persoonlijke pagina van gebruiker Y komen en dat is uiteraard niet de bedoeling.
Is er iemand die mij hiermee verder kan en wil helpen?!
Dit is een voorbeeld van de persoonlijke pagina van gebruiker X
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
if ($_SESSION['username'])
echo "Welkom, ".$_SESSION['username']."!<br><a href='logout.php'>Logout</a>";
else
die("U moet aangemeld zijn om deze pagina te kunnen bekijken!");
?>
<p>Hier komt dan de info welke alleen voor de ogen van deze gebruiker bedoeld is.</p>
session_start();
if ($_SESSION['username'])
echo "Welkom, ".$_SESSION['username']."!<br><a href='logout.php'>Logout</a>";
else
die("U moet aangemeld zijn om deze pagina te kunnen bekijken!");
?>
<p>Hier komt dan de info welke alleen voor de ogen van deze gebruiker bedoeld is.</p>
Gewijzigd op 17/09/2010 10:07:18 door Rinus Schuurman
heb je letterlijk voor elke gebruiker een php pagina of 1 pagina die met bijvoorbeeld werkt met ?gebruiker=Y ?
voor een pp heb je maar 1 php script nodig en niet voor elke gebruiker 1.
Dus inloggen
herkenbaarheid van de inlogger vastleggen
de pp opvragen aan de hand van hetgeen is vastgelegd in de sessie
en dan kan het nooit zo zijn dat een gebruiker uitkomt op andermasn pp
Ik heb letterlijk voor elke gebruiker een aparte pagina, althans... ik ben bezig met het aanmaken.
Op deze pagina komen de facturen en andere persoonlijke info te staan welke alleen voor de betreffende gebruiker bedoeld is.
Hoe het werkt met ?gebruiker=Y weet ik (nog) niet, daarvoor ben ik nog niet "gevorderd" genoeg, ik was al trots op mezelf dat ik zover ben gekomen als dat ik nu ben :)
Misschien een voorbeeldje hoe of wat voor mij?
@Noppes,
Ik geloof best dat het onhandig is, maar zoals ik hierboven zeg, ben ik allang blij dat ik zover ben gekomen als dat ik nu ben.
Ik ben welgeteld nu een paar dagen met PHP bezig ;).
Volgens mij doe ik precies wat jij zegt, dus ==> inloggen ==> inlogger vastleggen ==> password opvragen, de gebruiker komt dan ook op zijn/haar eigen pagina, het is alleen dan wel mogelijk om óók op de pagina van een andere gebruiker te komen (mits hij natuurlijk weet heeft van deze naam).
Is het mogelijk om de URL onzichtbaar of onleesbaar te maken?
Dus dat er niet komt te staan ... pagina_X.php bijv.
Maak een nieuw bestand aan genaamd persoonlijk of account of zoiets. Uit de database haal je dan de gegevens die bij de gebruiker horen. Ik zou wel het ID van de gebruiker ook in sessie opslaan want een database werkt sneller met integers. Op deze manier geeft de pagina alleen weer wat bij de ingelogde gebruiker hoort.
Ik ga er nu wel van uit dat je met een database werkt. Ik zou eens kijken op phptuts.nl daar staan een aantal leuke tutorials. Bij het woord facturen denk ik aan bedrijfsmatig gebruik en dan wil je wel wat veiligs lijkt me dan zou ik niet wat in elkaar flansen hoe goed het ook bedoeld is.
Gewijzigd op 17/09/2010 10:33:00 door - Mark -
Dus dat er niet komt te staan ... pagina_X.php bijv."
Dat heeft geen enkel nut, want je kan altijd als nog van die gekken treffen die gewoon willekeurige url gaan intypen.
Nee jij doet niet wat ik aangeef, je legt dan wel gegevens vast in een sessie maar je hebt voor elke gebruiken een pagina_x.php en dat is dus simpelweg fout!
Elke keer als er een pp pagina wordt opgevraagt dan gebruik je de waarden uit de sessie om de pp van die ingelogde gebruiker te tonen, dus kan het in rincipe ook niet gebeuren dat gebruiker x op de pp van y komt!
pp.pagina.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
27
28
29
30
31
32
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
<?php
session_start();
$bRedir = true;
if ( isset($_SESSION['ppid'])
&& trim($_SESSION['ppid']) != '') {
$sql = "SELECT *
FROM user_pp
WHERE user_pp_id = '".mysql_real_escape_string($_SESSION['ppid'])."'";
if (($res = mysql_query($sql)) !== false) {
if (mysql_num_rows($res) == 1) {
$row = mysql_fetch_assoc($res);
$bRedir = false;
}
else {
$bRedir = true;
}
}
else {
$bRedir = true;
}
}
if ($bRedir) {
// ga fietsen
}
else {
// toon profiel
}
?>
session_start();
$bRedir = true;
if ( isset($_SESSION['ppid'])
&& trim($_SESSION['ppid']) != '') {
$sql = "SELECT *
FROM user_pp
WHERE user_pp_id = '".mysql_real_escape_string($_SESSION['ppid'])."'";
if (($res = mysql_query($sql)) !== false) {
if (mysql_num_rows($res) == 1) {
$row = mysql_fetch_assoc($res);
$bRedir = false;
}
else {
$bRedir = true;
}
}
else {
$bRedir = true;
}
}
if ($bRedir) {
// ga fietsen
}
else {
// toon profiel
}
?>
Gewijzigd op 17/09/2010 10:38:31 door Noppes Homeland
Mark Coenen op 17/09/2010 10:31:52:
Maak een nieuw bestand aan genaamd persoonlijk of account of zoiets.
Volgens mij heb ik dat gedaan middels het bestand gebruiker_x.php of bedoel je wat anders?
In het laatste geval, zou je dan wat specifieker willen zijn, want ik ben niet te vergeten een beginner ;)
Mark Coenen op 17/09/2010 10:31:52:
Uit de database haal je dan de gegevens die bij de gebruiker horen. Ik zou wel het ID van de gebruiker ook in sessie opslaan want een database werkt sneller met integers. Op deze manier geeft de pagina alleen weer wat bij de ingelogde gebruiker hoort.
Ik weet hoe de info uit de database gehaald kan worden voor de specifieke gebruiker, alleen begrijp ik niet goed wat je hier mee bedoeld.
Mark Coenen op 17/09/2010 10:31:52:
Ik ga er nu wel van uit dat je met een database werkt.
Uiteraard ;)
Mark Coenen op 17/09/2010 10:31:52:
Bij het woord facturen denk ik aan bedrijfsmatig gebruik en dan wil je wel wat veiligs lijkt me dan zou ik niet wat in elkaar flansen hoe goed het ook bedoeld is.
Heb je helemaal gelijk in, alleen is dit nu even van ondergeschikt belang ;)
Bedankt iig voor het meedenken!
Toevoeging op 17/09/2010 10:41:09:
Noppes Homeland op 17/09/2010 10:35:58:
"Is het mogelijk om de URL onzichtbaar of onent leesbaar te maken?
Dus dat er niet komt te staan ... pagina_X.php bijv."
Dat heeft geen enkel nut, want je kan altijd als nog van die gekken treffen die gewoon willekeurige url gaan intypen.
Nee jij doet niet wat ik aangeef, je legt dan wel gegevens vast in een sessie maar je hebt voor elke gebruiken een pagina_x.php en dat is dus simpelweg fout!
Elke keer als er een pp pagina wordt opgevraagt dan gebruik je de waarden uit de sessie om de pp van die ingelogde gebruiker te tonen, dus kan het in rincipe ook niet gebeuren dat gebruiker x op de pp van y komt!
pp.pagina.php
Dus dat er niet komt te staan ... pagina_X.php bijv."
Dat heeft geen enkel nut, want je kan altijd als nog van die gekken treffen die gewoon willekeurige url gaan intypen.
Nee jij doet niet wat ik aangeef, je legt dan wel gegevens vast in een sessie maar je hebt voor elke gebruiken een pagina_x.php en dat is dus simpelweg fout!
Elke keer als er een pp pagina wordt opgevraagt dan gebruik je de waarden uit de sessie om de pp van die ingelogde gebruiker te tonen, dus kan het in rincipe ook niet gebeuren dat gebruiker x op de pp van y komt!
pp.pagina.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
27
28
29
30
31
32
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
<?php
session_start();
$bRedir = true;
if ( isset($_SESSION['ppid'])
&& trim($_SESSION['ppid']) != '') {
$sql = "SELECT *
FROM user_pp
WHERE user_pp_id = '".mysql_real_escape_string($_SESSION['ppid'])."'";
if (($res = mysql_query($sql)) !== false) {
if (mysql_num_rows($res) == 1) {
$row = mysql_fetch_assoc($res);
$bRedir = false;
}
else {
$bRedir = true;
}
}
else {
$bRedir = true;
}
}
if ($bRedir) {
// ga fietsen
}
else {
// toon profiel
}
?>
session_start();
$bRedir = true;
if ( isset($_SESSION['ppid'])
&& trim($_SESSION['ppid']) != '') {
$sql = "SELECT *
FROM user_pp
WHERE user_pp_id = '".mysql_real_escape_string($_SESSION['ppid'])."'";
if (($res = mysql_query($sql)) !== false) {
if (mysql_num_rows($res) == 1) {
$row = mysql_fetch_assoc($res);
$bRedir = false;
}
else {
$bRedir = true;
}
}
else {
$bRedir = true;
}
}
if ($bRedir) {
// ga fietsen
}
else {
// toon profiel
}
?>
Ik ga het proberen en ik kom er op terug ;)
Tot zover bedankt voor de hulp!
Quote:
Volgens mij heb ik dat gedaan middels het bestand gebruiker_x.php of bedoel je wat anders?
In het laatste geval, zou je dan wat specifieker willen zijn, want ik ben niet te vergeten een beginner ;)
In het laatste geval, zou je dan wat specifieker willen zijn, want ik ben niet te vergeten een beginner ;)
1 Pagina voor alle gebruikers. Hoe die pagina eruit ziet ligt eraan wat uit de database wordt gehaald. Noppes heeft je al een voorbeeld gegeven zie ik.
Het zal nog wel wat uurtjes studeren worden voordat ik zover ben helaas :(
Dynamischer denken en doen!
gebruiker_x logt in en komt op de pagina beveiligd.php
Dit is tevens de pagina waar iedere andere gebruiker op komt na succesvol inloggen.
Deze pagina laat informatie zien aan gebruiker_x wat toegestaan wordt omdat gebruiker_x gebruiker_x is.
dus als gebruiker_$ == gebruiker_$ dan echo "factuur_$.pdf" toch? (in grote lijnen dan tenminste hahaha)
Je zult gewoon een table hebben met pdf_facturen
id
user_id
filename
path
en voor filenames gebruik je dan bijvoorbeeld:
<factuurvolgnummer:n4>_<datum:n8>.pdf
dus dan kan je gewoon aan de hand van het user_id de bijbehorende facturen tonen
Omdat ik (nog) niet bekend genoeg ben met PHP weet ik ook alle mogelijkheden (nog) niet, maar dit zal naarmate de tijd vordert beter gaan denk ik ;)
Noppes Homeland op 17/09/2010 11:11:26:
Wel dat is nog niet dynamisch genoeg denk ik...
Je zult gewoon een table hebben met pdf_facturen
id
user_id
filename
path
en voor filenames gebruik je dan bijvoorbeeld:
<factuurvolgnummer:n4>_<datum:n8>.pdf
dus dan kan je gewoon aan de hand van het user_id de bijbehorende facturen tonen
Je zult gewoon een table hebben met pdf_facturen
id
user_id
filename
path
en voor filenames gebruik je dan bijvoorbeeld:
<factuurvolgnummer:n4>_<datum:n8>.pdf
dus dan kan je gewoon aan de hand van het user_id de bijbehorende facturen tonen
Misschien een beetje domme vraag, maar waar staat :n4 en :n8 voor, welke respectievelijk achter factuurvolgnummer en datum staan?
Toevoeging op 20/09/2010 14:08:58:
Hoe voorkom ik trouwens dat er 2 of meer personen registreren met de zelfde gebruikersnaam?
Op dit moment is het namelijk zo dat ik twee test personenen kan laten registreren met de zelfde inlognaam en wachtwoord, dat moeten we natuurlijk niet hebben :)
Toevoeging op 21/09/2010 12:05:10:
voorkomen van 2 of meer gebruikers met de zelfde gebruikersnaam is inmiddels verholpen op de volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//controleer of de ingevulde gebruikersnaam niet al bestaat in de database
$connect = mysql_connect("localhost","dbusername","password");
mysql_select_db("databasename");
$query = mysql_query("SELECT * FROM users WHERE user='$username'");
if(mysql_num_rows($query) != 0)
{
echo "Deze gebruikersnaam is reeds in gebruik!";
}
else
{
//verder gaan met het script!
}
?>
//controleer of de ingevulde gebruikersnaam niet al bestaat in de database
$connect = mysql_connect("localhost","dbusername","password");
mysql_select_db("databasename");
$query = mysql_query("SELECT * FROM users WHERE user='$username'");
if(mysql_num_rows($query) != 0)
{
echo "Deze gebruikersnaam is reeds in gebruik!";
}
else
{
//verder gaan met het script!
}
?>
Gewijzigd op 21/09/2010 12:05:56 door Rinus Schuurman