[PHP] Inlogsysteem

Status
Niet open voor verdere reacties.

Saviola

Gebruiker
Lid geworden
30 jun 2002
Berichten
793
Hoi,

Ik heb vandaag voor het eerst een inlogsysteem in elkaar geknutseld (met cookies :) ). Die is hier te 'bewonderen' (naam: jeffrey, ww: test).

Als ik nu bijvoorbeeld een membersysteem wil maken waarbij iedere members bv. zijn eigen profiel kan invullen. Hoe kan ik er dan voor zorgen dat iedere member enkel zijn eigen pagina te zien krijgt, zodat hij wat kan aanpassen etc.

Als ik te vaag ben, roep maar :D
 
Je maakt in je database een tabel met bijvoorbeeld deze rijen: id, naam, woonplaats, hobbys, quote.

Als je dan de id van die gebruiker in de cookie zet, kun je alle gegevens er uithalen van die id.

mysql_query("SELECT * FROM members WHERE id='{$_COOKIE['login']}'");

(Mijn cookie heet hier 'login').
 
Leuk, zo'n login ding, maar toch nog een dringende tip: gebruik bij het wachtwoord voor type="password" nu kan ik nog zien wat ik typ. Niet zo veilig voor als de buurman ofzo over je schouder meekijkt...

Verder kun je inderdaad zoals chris al zegt dat zelf bepalen door het ID van die ingelogde ergens op te slaan (kan ook in een session var, cookie is lastig..) zodat je makkelijk een query kunt opbouwen daarvoor en zo een compleet voor diegene aangepaste pagina kan laten zien
 
Ik heb tot nu toe $HTTP_COOKIE_VARS[''] gebruikt. Kan dat ook in:

mysql_query("SELECT * FROM users WHERE id = '$HTTP_COOKIE_VARS["id"]'");

Over dat password field, die krijgt natuurlijk sterretjes. Maar dit ging enkel om het scripten :) Was allang blij dat het werkte.

Dus dan kan ik een standaard page maken met:

$query2 = mysql_query("SELECT * FROM users WHERE id = '$HTTP_COOKIE_VARS["id"]'");

$view = mysql_fetch_array($query2, MYSQL_ASSOC);

echo "Je naam is: ". $view['naam'];

Bedankt voor de hulp zover :thumb:
 
$view = mysql_fetch_array($query2, MYSQL_ASSOC);

kun je vereenvoudigen naar

$view = mysql_fetch_assoc($query2);
 
@Saviola: OOK in MySQL query's moet je niet zomaar array's zetten! Dat werkt sowieso niet, en het is nog steeds niet de goede manier als je {$array['key']} doet... Ik verheug me op de dag dat PHP die domme regel er weer uit haalt want het slaat nergens op...

Dan nog iets: $HTTP_COOKIE_VARS en al zijn verwanten (POST, GET, REQUEST, SESSION, FILE, ENV...) moet je voortaan maar gewoon zo schrijven: $_POST. Dat is vele malen korter, is de nieuwe manier en bovendien gaan die oude er in PHP 5 denk ik toch wel uit en dan zouden al je scripts het ineens niet meer doen...

[edit]
@chris: dat MYSQL_ASSOC is niet echt nodig, beetje dubbelop. Dat je het in een associatieve array wilt stoppen geef je al aan met mysql_fetch_array. Natuurlijk kun je ook fetch_assoc doen maar tsjah je kunt ook fetch_row en fetch_object doen dus vele mogelijkheden. Maar iig doe geen constant achter je query, das dubbelop.
[/edit]
 
Laatst bewerkt:
Ik vraag me toch af wat jij tegen {$var['key']} hebt? Als het werkt dan is het toch goed?
 
Het werkt wel, maar er is zoveel dat je doet waardoor iets wel werkt maar het is niet echt goed ervoor. Het licht steeds aan/uit doen kan wel, maar het is niet echt bevorderend voor de lamp... Je PC steeds aan en uit doen kan en mag wel maar het is beter van niet... Zo werkt het hier ook bij: je dwingt php in feite die array ook te parsen door er haakjes om heen te zetten. Bovendien:

- ziet het er niet uit. In de meeste editors kun je zo de variabelen en array's niet snel meer vinden
- het is (naar mijn idee) meer werk, want je moet er iedere keer op letten dat je { doet en niet [ of (. Als je ellenlange queries hebt dan is zo'n fout snel gemaakt en dan ben je nog wel ff bezig...
- PHP heeft het er op veel verzoek in gedaan omdat mensen het ook gewend waren met vars, lekker makkelijk. Maar daarvoor was het dus niet mogelijk het op deze manier te doen. Het is dus omdat zoveel mensen erom vroegen maar anders...

Dat zijn er een paar :)
 
Ik zal meer gebruik gaan maken van het scheiden met een punt.

Wat is het verschil tussen session var en een cookie?Eerder in de topic (door Pcfixer) werd gezegd dat session var makkelijker is.

Het is me trouwens gelukt :)
 
Idd, het is makkelijker (vind ik, ik werk nog nauwelijks met cookies) om in zo'n sessie als een login gebeuren zoiets in een session variabele op te slaan aangezien je anders voor elke setting een aparte cookie moet aanmaken wat onnodig is. Een session var wordt op de server tijdelijk op geslagen en wordt vernietigd zodra de sessie wordt beeindigt (ofwel doordat de gebruiker het browserwindow sluit ofwel door session_destroy() (loguit functie)).

Sessionvars zijn ook iets makkelijker aan te maken: zorg dat de waarde van de var een variabele is en geen array of array key. Dus niet $array[1] of $array als argument opgeven want dan krijg je rare effecten. Als het dan echt een arraywaarde moet zijn kopieer het dan ff naar een variabele:

$array_var = $array[1];

En dan doe je (na session_start()) session_register("array_var"). Ja, je leest het goed: als een string en zonder het $ teken. Als je dit niet doet en het gewoon als var doorgeeft zal het ongeldig worden verklaart.

Meer info kan op nl.php.net/session_register gevonden worden.
 
Je kunt de gebruikers natuurlijk ook een optie geven om hun inloggegevens te onthouden (cookie). Als ze dat niet doen, doe je met een session. Zelf vind ik sessions nogal irritant, omdat je steeds opnieuw moet inloggen.

Doe dat bijv. met een chechbox.

<input type="checkbox" name="onthouden" value="1">

PHP:
<?

if(IsSet($_POST['onthouden']))
     setcookie('login', '$id', time()+86400*7); // deze staat op 7 dagen
else
{
session_start();
session_register('id');
}

?>
 
Het nadeel van een session is dus dat het niet 'onthouden' word zoals bij een cookie. Bij setcookie() kan je de tijd instellen waarna hij vervalt.

Hoe kan ik dan meerdere vars opslaan in één session? Dat is wel een voordeel t.o.v. cookies.

Bedankt zover :thumb:
 
Saviola,

Je kunt zoveel als je wilt in session vars opslaan als je wilt (alhoewel er wel een limiet op zit, maar let daar verder niet op. Voordat je dat vol hebt ben je nog wel ff bezig) met session_register(). De waarde roep je dan vervolgens aan met $_SESSION["var"]. Maar bij het registreren ervan moet het argument dus wel een variabele zijn ergens anders in het script, je kunt niet gewoon zomaar ff een argument meegeven als waarde.

En over het inlogsysteem met cookies of sessions: het hangt er vanaf waar je het voor wilt gaan gebruiken, want als het een admin sessie is is het natuurlijk niet handig om een cookie te doen aangezien iedereen die binnen de tijdslimiet daar naartoe gaat erin kan komen wat niet de bedoeling is. Als het gewoon om een "persoonlijk profiel" gaat ofzo of een lidmaatschap (helpmij bijv.) dan is het nog niet zo'n punt.
 
Geplaatst door pcfixer
Saviola,

Je kunt zoveel als je wilt in session vars opslaan als je wilt (alhoewel er wel een limiet op zit, maar let daar verder niet op. Voordat je dat vol hebt ben je nog wel ff bezig) met session_register(). De waarde roep je dan vervolgens aan met $_SESSION["var"]. Maar bij het registreren ervan moet het argument dus wel een variabele zijn ergens anders in het script, je kunt niet gewoon zomaar ff een argument meegeven als waarde.

En over het inlogsysteem met cookies of sessions: het hangt er vanaf waar je het voor wilt gaan gebruiken, want als het een admin sessie is is het natuurlijk niet handig om een cookie te doen aangezien iedereen die binnen de tijdslimiet daar naartoe gaat erin kan komen wat niet de bedoeling is. Als het gewoon om een "persoonlijk profiel" gaat ofzo of een lidmaatschap (helpmij bijv.) dan is het nog niet zo'n punt.

Oke bedankt. Die sessions kunnen de oplossing zijn voor m'n andere probleem, maar die stel ik nog wel als het echt niet lukt.

Bij mijn inlogysteem (gisteren heb ik een nieuwe versie geschreven) wordt bij het inloggen de username en password opgeslagen in een cookie. Bij iedere pagina laat ik checken of deze waardes kloppen met die in de database(met if, else). Het is dus niet zo makkelijk als jij zegt dat iedereen binnen de tijdslimiet erin kan.

Bij de check wordt gekeken of de waardes in de cookies hetzelfde zijn als in de database. Daarna het aantal rows geteld. Als het aantal rows 1 krijgt de persoon de pagina te zien. Anders wordt hij terug gezet naar de index.php. Naar mijn idee redelijk toch?
 
Ik zal bij je login-pagina een foutmelding laten zien dat de gegevens niet kloppen, ipv naar de index sturen.
 
Geplaatst door chrisgeerdink
Ik zal bij je login-pagina een foutmelding laten zien dat de gegevens niet kloppen, ipv naar de index sturen.

Kan ook. Maar op de index staan de login velden.

[edit]

@ Chrisgeerdink

Bedankt voor het onthoud-cookie idee. Erg handig.

[/edit]
 
Laatst bewerkt:
Nee, maar een cookie moet een tijdslimiet hebben. En stel deze zet je op een week (84600*7) dan bestaan die cookies tot zo lang en iedereen die dan binnen die 7 dagen op één van die pagina's komt heeft toegang, de cookie is immers nog steeds geldig.

Als je dat niet doet en er een kleine limiet op zet is het nagenoeg zinloos want daarvoor zijn cookies nou niet bedoeld. Dan kun je beter session vars of session ID's gebruiken.
 
Geplaatst door pcfixer
Nee, maar een cookie moet een tijdslimiet hebben. En stel deze zet je op een week (84600*7) dan bestaan die cookies tot zo lang en iedereen die dan binnen die 7 dagen op één van die pagina's komt heeft toegang, de cookie is immers nog steeds geldig.

Als je dat niet doet en er een kleine limiet op zet is het nagenoeg zinloos want daarvoor zijn cookies nou niet bedoeld. Dan kun je beter session vars of session ID's gebruiken.

Als sessions blijven bestaan tot ik session_destroy() of het venster sluit ben ik overtuigd ;)

Als cookies zo onveilig zijn waarom worden ze dan zo vaak gebruikt?

En zoals hier op helpmij. Ik word automatisch ingelogd als ik het forum bezoek, dat is toch wel een cookie?
 
En over het inlogsysteem met cookies of sessions: het hangt er vanaf waar je het voor wilt gaan gebruiken, want als het een admin sessie is is het natuurlijk niet handig om een cookie te doen aangezien iedereen die binnen de tijdslimiet daar naartoe gaat erin kan komen wat niet de bedoeling is. Als het gewoon om een "persoonlijk profiel" gaat ofzo of een lidmaatschap (helpmij bijv.) dan is het nog niet zo'n punt.

Zie mijn vorige topic :)
 
Sorry, overheen gelezen..

Bedankt allemaal. Ik ga binnenkort een nieuwe loginsysteem schrijven met admin functie, persoonlijk profiel, sessions en cookies. Als ik problemen heb horen jullie het wel.

:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan