Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
In het kort:
* Maak een database met users en wachtwoorden
1
2
| userID | username | password 1 | jantje | één of andere hash van het wachtwoord |
* Schrijf een login scriptje dat die combinatie controleert (let op voor sql injections (Wikipedia: SQL injection)!)
1
2
3
4
5
6
7
| if (submit){ check in database of combinatie overeenkomt if (OK) zet een sessie of cookie else foutmelding } |
* Toon met één of andere if-then relevante content:
1
2
3
4
| if (logged_in) echo 'dit mogen enkel ingelogde gebruikers zien'; else echo 'jij bent niet ingelogd!'; |
ga hier maar eens mee aan de slag
[ Voor 77% gewijzigd door webinn op 11-01-2009 15:24 ]
Wat tips die je misschien op weg kunnen helpen:
- centraliseer de inlog/uitlog/autorisatie.. dit maakt het niet alleen makkelijker dingen te wijzigen, maar je verzekert jezelf er ook van dat alle autorisaties en dergelijke op de zelfde manier worden behandelt
- als je cookies gebruikt voor langdurige inlogsessies, bedenk dan een goede manier om de cookies te valideren. Sla dus niet alleen de userID op, maar bijvoorbeeld 1 cookie met userID, en 1 met een salted hash van gebruikersnaam+wachtwoord+id.
- dwing mensen niet om een cookie te hebben, omdat zoekmachines enzo geen cookies accepteren. Dit zorgt nog wel eens voor een redirect loop
- sla in de database nooit de plaintext wachtwoorden op. Sla altijd een hash op, en controleer inlog-requests aan de hand van die hashes.
- zorg ervoor dat twee gebruikers niet dezelfde username kunnen hebben.
Nog een paar zaken die ik heel erg handig vind:
- maak een "guest" gebruiker aan die gebruikt word door iedereen die niet ingelogd is. Dit maakt het makkelijker om gebruikersinstellingen en gebruikersrechten te beheren. Ook kan je dan bijvoorbeeld comments door guests toestaan, en alsnog bijhouden hoeveel guests er gepost hebben. Dus voor statistieken is het ook heel handig
- maak de user tabel van SQL niet te groot. als je veel instellingen of informatie van de gebruiker moet weten, hou deze apart van de user tabel. De user tabel hoeft enkel de userdata te bevatten die belangrijk is (id, username, password, usergroup, etc). instellingen zoals "geboortedatum" kan je ook in een aparte tabel bewaren
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Peter\xampp\htdocs\login\checklogin.php on line 37
Wrong Username or Password"
Nu heb ik daar op gezocht en heb ik gelezen dat ik dit,
1
| $result=mysql_query($sql); |
kan vervangen door,
1
| $result = mysql_query ($query) or die (mysql_error ()); |
om er een duidelijkere foutmelding uit te halen. Na ik dit heb gedaan kreeg ik dit dus op de pagina waneer ik er op inlogde: "Query was empty".
Dit samen met de melding dat er een foute username/password wordt gegeven duid er dus op dat de gegevens die worden ingevoerd niet worden "meegenomen" naar de juist plek. Er wordt wel verbinding gemaakt met de DB. Maar de query blijft wel leeg.
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
| <?php ob_start(); $host="localhost"; // Host name $username="root"; // Mysql username $password=""; // Mysql password $db_name="login"; // Database name $tbl_name="members"; // Table name // Connect to server and select databse. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // Define $myusername and $mypassword $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; // To protect MySQL injection (more detail about MySQL injection) $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; $result = mysql_query ($query) or die (mysql_error ()); // Mysql_num_row is counting table row $count=mysql_num_rows($result); // If result matched $myusername and $mypassword, table row must be 1 row if($count==1){ // Register $myusername, $mypassword and redirect to file "login_success.php" session_register("myusername"); session_register("mypassword"); header("location:login_success.php"); } else { echo "Wrong Username or Password"; } ob_end_flush(); ?> |
Sorry voor het posten van de code ik probeer wel veel zelf uit te zoeken maar ja kan
Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
Mother north, how can they sleep while their beds are burning?
Ik zal toch zelf ook wat nadenken.. common sense + punten die boven je staan aangegeven
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
Trouwens link0007...ik kan me aardig vinden in je tips behalve de laatste: ik ben benieuwd waarom je 2 tabellen wilt hebben voor dezelfde user? Waarom zou je de geboortedatum opslaan in een losse tabel ipv. in de row van de user?
Mag genegeerd worden, is niet echt van levensbelang bedenk ik nu
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
Ik ben benieuwd _waarom_ je dat op die manier wilt doen en waarom je denkt dat je usertabel compact moet zijn? Ik zie het nut bij instellingen oid wel als het een 1:n relatie betreft maar 1:1 is alleen maar omslachtig en niet-logisch. Van levensbelang is het niet nee, maar wellicht breng je mensen onnodig om gekke ideeen zo.link0007 schreef op zondag 11 januari 2009 @ 22:45:
Cartman: Het kan natuurlijk wel (misschien had ik beter "tijdzone" oid kunnen gebruiken als voorbeeld), maar ik vind dat een user tabel redelijk compact moet zijn, en instellingen van een user niet thuishoren in de user tabel, maar in een settings tabel
Mag genegeerd worden, is niet echt van levensbelang bedenk ik nu
Nu wil ik vanavond nog bezig met deze "login" site en die info te koppelen aan de rechten van een bezoeker.
Omdat ik online maar één DB is en die al in gebruik is kan ik het niet online zetten maar wat moet ik gebruiken om de site duidelijk te maken dat de bezoeker ingelogd is en nu dus extra rechten heeft.
//edit. http://www.tutorialized.c...Membership-with-PHP/40087 deze tutorial heeft me goed geholpen bij het maken van de database etc.
Waar ik zelf aan zit te denken is om bij de registratie een checkbox te zetten die je kan aanvinken en dat dan te koppelen aan de DB waardoor er bijvoorbeeld in het veld "rights" "viewing" en daar dan een 1 in komt.
En in de pagina moet er dan iets komen met,
if $_USERRIGHTS = 1 SHOW echo"text".
else
""
Ik ben nog lang niet goed genoeg met PHP om hier zelf een script voor te maken maar wil graag weten welke keywords ik kan gebruiken om me hier mee te helpen
[ Voor 39% gewijzigd door MrVegeta op 12-01-2009 23:28 ]
Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
Wat je doet is een admin pagina maken met een wachtwoord om iemand rechten te geven (of eventueel handmatig in je tabel aan te passen in bv phpmyadmin).
Je zou dan een veld HAS_ACCESS kunnen maken. Op de pagina waar je gebruiker iets moet kunnen zien kan je dan een query uitvoeren en de database waarde opvragen. Indien de gebruiker toegang heeft, kan je tonen wat je wil tonen
Ja dat maakt ook verder niet uit vooralsnog ben ik de enige die zich registreert en inlogt op de website. Een exta veld maken met "ACCES" dus, ik zal me verdiepen in hoe ik die waarde kan ophalen en daar aan kan koppelen.webinn schreef op dinsdag 13 januari 2009 @ 11:00:
ik denk dat je zelf (als admin) iemand rechten moet geven en niet bij de registratie een veldje moet voorzien of ze bepaalde rechten krijgen of niet.
Wat je doet is een admin pagina maken met een wachtwoord om iemand rechten te geven (of eventueel handmatig in je tabel aan te passen in bv phpmyadmin).
Je zou dan een veld HAS_ACCESS kunnen maken. Op de pagina waar je gebruiker iets moet kunnen zien kan je dan een query uitvoeren en de database waarde opvragen. Indien de gebruiker toegang heeft, kan je tonen wat je wil tonen
Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
lalala.... laat..
[ Voor 20% gewijzigd door ReseTTim op 13-01-2009 11:12 ]
Mijn profiel - Te koop: Overzicht van spullen..
ook hier weer een kleine google tip: http://www.google.be/sear...p+query&btnG=Zoeken&meta=MrVegeta schreef op dinsdag 13 januari 2009 @ 11:06:
[...]
Ja dat maakt ook verder niet uit vooralsnog ben ik de enige die zich registreert en inlogt op de website. Een exta veld maken met "ACCES" dus, ik zal me verdiepen in hoe ik die waarde kan ophalen en daar aan kan koppelen.

https://niels.nu
1
2
3
4
5
6
7
8
9
10
| <?php if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username'])) { ?> Hi this is some extra content you can see because your logged in. <?php } ?> |
Zo werkt het
En met deze code kan ik content plaatsen die je niet ziet als je niet bent ingelogt.
Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
Anyone who gets in between me and my morning coffee should be insecure.
Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps
Waarom zou een sessie-id sowieso ook maar enigszins gekoppeld moeten zijn aan username en/of wachtwoord en/of id? Het moet vooral random en niet raadbaar zijn. En vaste elementen zijn nou eenmaal geen goede bron van entropie.link0007 schreef op zondag 11 januari 2009 @ 15:33:
- als je cookies gebruikt voor langdurige inlogsessies, bedenk dan een goede manier om de cookies te valideren. Sla dus niet alleen de userID op, maar bijvoorbeeld 1 cookie met userID, en 1 met een salted hash van gebruikersnaam+wachtwoord+id.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.