Hallo,
Veel mensen zullen het, net als ik, ongelofelijk irritant vinden om constant weer opnieuw te moeten inloggen. Bij een ledensysteem is het zo dat de login informatie opslaat in een sessie, het nadeel hieraan is dat deze verloren gaan in de verloop van tijd.
Nu is dit probleem simpel te verhelpen door het login in systeem volledig op Cookies te laten draaien, maar dan nog is het niet geweldig.
Daarom gaan we nu een systeem maken dat makkelijk bij elk bestaand systeem in te zetten is, en ervoor zorgt de de login onthouden word, en meteen multiple logins delete (dus dat je op meerdere PCs op hetzelfde account zit).
LET OP!! Ik ga er bij dit script vanuit dat je huidige inlogsysteem het id van de gebruiker opslaat in een session! Zoniet zal dit niet werken
1. Hoe werkt het
Wat we gaan doen is een extra tabel maken in de database, de tabel logins. Deze tabel zou de logins onthouden. Deze tabel heeft 4 waardes: id, user, code en ip
Als je inlogd word er een code gemaakt, en deze word samen met het ip en het id van de gebruiker (als user) in de database gezet.
Vervolgens word deze code onthouden door een Cookie, en als je nu opnieuw naar de pagina gaat zal het systeem zien dat er een cookie bestaat, controleren of deze sessie nog loopt, zoja zichzelf inloggen en alle andere sessies met dezelfde gebruiker uitschakelen.
2. De Database
Ten eerste gaan we een database aanmaken voor ons systeem.
De code hiervoor heb ik al, gewoon copy paste:
Deze tabel is de basis van ons systeem
3. Inloggen
Bij het inloggen moeten er nu dus 2 extra dingen gebeuren:
- Er moet een lijn in de database gezet worden
- Er moet een cookie aangemaakt worden
We beginnen gewoon bij het begin, een rij in de database zetten.
Hiervoor hebben we de user nodig, het ip en een code.
Dus beginnen met deze waardes:
Omdat het IP makkelijk op te halen is word die niet van tevoren gedefinieerd.
Wat hier nu gebeurt:
- $user = 5; | Hier geven we het ID van de gebruiker door, dsu het ID die in de database staat bij je leden tabel. Vervang dus de 5 door een variabele met het id
- $code = md5(microtime()); | Hier halen we eerst de microtime op, zodat alle codes uniek zijn, een dubbele code in microtime is zo goed als niet mogelijk. Dan maken we er een md5 hash van, zodat we een mooie code krijgen.
Hierna zetten we dit in de database, gewoon met een normale query:
Als laatste maken we een cookie aan, zodat alles onthouden word:
Eerst geven we hier het aantal dagen aan dat je ingelogd blijft, je kan dit bijv. op 9999 zetten voor een waarde die nagenoeg voor altijd betekent, maar ik gebruik hier 350 voor ongeveer een jaar
Dan maken we een cookie aan, usercode, die de code opslaat.
Het totale inloggedeelte word dan dus:
Door dit simpel bij je code voor inloggen te plakken werkt het al!
4. Controle
Nu word je dus ingelogd, echter word je nu nog niet goed onthouden.
Als je nu weer op de pagina komt ben je gewoon uitgelogd, er moet nog automatisch worden ingelogd.
Dit doen we met een code die ik niet helemaal met jullie ga bespreken, maar er alsvolgd uitziet:
LET OP!! verander login bij de sessie in de naam van jouw sessie waarin het id van de gebruiker word onthouden!
In het kort wat hier gebeurd:
- Eerst controleren we of de Cooke of Session bestaat (of allebei), indien zo gaan we verder
- Als alleen de session bestaat word je uitgelogd: er is dan dus iets niet goed gegaan (vervang de code naar je pagina voor uitloggen!)
- Als alleen de cookie bestaat gaat hij controleren of de code en ip matchen met een rij in de tabel
- Zoja maakt hij een session aan, en verwijderd hij alle andere sessies van deze gebruiker
- Zonee logt hij je uit, je hebt een foutieve sessie
- Als de sessie en de cookie bestaan verwijderd hij alleen alle sessies van deze gebruiker
Zet deze code in een bestand dat op elke pagina voorkomt, je header bestand, en alles word keurig bij gehouden en je word ingelogd bij elk bezoek!
5. Uitloggen
Bij het uitloggen moet er nu iets meer gebeuren dan eerst.
Teneerste moet de Cookie verwijderd worden, en ook de sessie in de database:
Zet dit bij je loguit script en het systeem is compleet!
6. Nawoord
Hou in de gaten dat systeem echt de basis is, er zijn nog veel meer opties hiervoor. Het kan bijvoorbeeld nog strakker werken, zodat zelfs alleen de sessie genoeg is, maar dit is niet altijd betrouwbaar.
Probeer vooral of je dit nog iets verder kan uitbreiden, en maak het je eigen
Ciaa
Veel mensen zullen het, net als ik, ongelofelijk irritant vinden om constant weer opnieuw te moeten inloggen. Bij een ledensysteem is het zo dat de login informatie opslaat in een sessie, het nadeel hieraan is dat deze verloren gaan in de verloop van tijd.
Nu is dit probleem simpel te verhelpen door het login in systeem volledig op Cookies te laten draaien, maar dan nog is het niet geweldig.
Daarom gaan we nu een systeem maken dat makkelijk bij elk bestaand systeem in te zetten is, en ervoor zorgt de de login onthouden word, en meteen multiple logins delete (dus dat je op meerdere PCs op hetzelfde account zit).
LET OP!! Ik ga er bij dit script vanuit dat je huidige inlogsysteem het id van de gebruiker opslaat in een session! Zoniet zal dit niet werken
1. Hoe werkt het
Wat we gaan doen is een extra tabel maken in de database, de tabel logins. Deze tabel zou de logins onthouden. Deze tabel heeft 4 waardes: id, user, code en ip
Als je inlogd word er een code gemaakt, en deze word samen met het ip en het id van de gebruiker (als user) in de database gezet.
Vervolgens word deze code onthouden door een Cookie, en als je nu opnieuw naar de pagina gaat zal het systeem zien dat er een cookie bestaat, controleren of deze sessie nog loopt, zoja zichzelf inloggen en alle andere sessies met dezelfde gebruiker uitschakelen.
2. De Database
Ten eerste gaan we een database aanmaken voor ons systeem.
De code hiervoor heb ik al, gewoon copy paste:
CREATE TABLE IF NOT EXISTS `logins` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` int(11) NOT NULL,
`code` varchar(32) NOT NULL,
`ip` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Deze tabel is de basis van ons systeem
3. Inloggen
Bij het inloggen moeten er nu dus 2 extra dingen gebeuren:
- Er moet een lijn in de database gezet worden
- Er moet een cookie aangemaakt worden
We beginnen gewoon bij het begin, een rij in de database zetten.
Hiervoor hebben we de user nodig, het ip en een code.
Dus beginnen met deze waardes:
[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]5[/COLOR][COLOR= #007700];[/COLOR] [COLOR= #FF8000]//Vervang 5 door een waarde van het id van de user[/COLOR]
[COLOR= #0000BB]$code[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/md5"]md5[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/microtime"]microtime[/URL][COLOR= #007700]());[/COLOR]
?> Omdat het IP makkelijk op te halen is word die niet van tevoren gedefinieerd.
Wat hier nu gebeurt:
- $user = 5; | Hier geven we het ID van de gebruiker door, dsu het ID die in de database staat bij je leden tabel. Vervang dus de 5 door een variabele met het id
- $code = md5(microtime()); | Hier halen we eerst de microtime op, zodat alle codes uniek zijn, een dubbele code in microtime is zo goed als niet mogelijk. Dan maken we er een md5 hash van, zodat we een mooie code krijgen.
Hierna zetten we dit in de database, gewoon met een normale query:
[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO logins (user, code, ip) VALUES("[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$user[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$code[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REMOTE_ADDR[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700]);[/COLOR]
?> Als laatste maken we een cookie aan, zodat alles onthouden word:
[COLOR= #0000BB]<?php
$dagen[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]350[/COLOR][COLOR= #007700];[/COLOR] [COLOR= #FF8000]// Aantal dagen dat je ingelogd blijft[/COLOR]
[URL="http://www.php.net/setcookie"]setcookie[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$code[/COLOR][COLOR= #007700],[/COLOR] [URL="http://www.php.net/time"]time[/URL][COLOR= #007700]()+[/COLOR][COLOR= #0000BB]60[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]60[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]24[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]$dagen[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]/[/COLOR][COLOR= #007700]);[/COLOR]
?> Eerst geven we hier het aantal dagen aan dat je ingelogd blijft, je kan dit bijv. op 9999 zetten voor een waarde die nagenoeg voor altijd betekent, maar ik gebruik hier 350 voor ongeveer een jaar
Dan maken we een cookie aan, usercode, die de code opslaat.
Het totale inloggedeelte word dan dus:
[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]5[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$dagen[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]350[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$code[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/md5"]md5[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/microtime"]microtime[/URL][COLOR= #007700]());[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO logins (user, code, ip) VALUES("[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$user[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$code[/COLOR][COLOR= #007700].[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REMOTE_ADDR[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/setcookie"]setcookie[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$code[/COLOR][COLOR= #007700],[/COLOR] [URL="http://www.php.net/time"]time[/URL][COLOR= #007700]()+[/COLOR][COLOR= #0000BB]60[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]60[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]24[/COLOR][COLOR= #007700]*[/COLOR][COLOR= #0000BB]$dagen[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]/[/COLOR][COLOR= #007700]);[/COLOR]
?> Door dit simpel bij je code voor inloggen te plakken werkt het al!
4. Controle
Nu word je dus ingelogd, echter word je nu nog niet goed onthouden.
Als je nu weer op de pagina komt ben je gewoon uitgelogd, er moet nog automatisch worden ingelogd.
Dit doen we met een code die ik niet helemaal met jullie ga bespreken, maar er alsvolgd uitziet:
LET OP!! verander login bij de sessie in de naam van jouw sessie waarin het id van de gebruiker word onthouden!
[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/session_start"]session_start[/URL][COLOR= #007700]();[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]]) ||[/COLOR] [URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]login[/COLOR][COLOR= #007700]])){[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]])){[/COLOR]
[COLOR= #FF8000]//Zet hier een code neer die redirect naar je uitloggen[/COLOR]
[COLOR= #007700]}[/COLOR]
[URL="http://www.php.net/elseif"]elseif[/URL][COLOR= #007700](![/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]login[/COLOR][COLOR= #007700]])){[/COLOR]
[COLOR= #0000BB]$UserQuery[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT user FROM logins WHERE code = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]" AND ip = "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REMOTE_ADDR[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/mysql_num_rows"]mysql_num_rows[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$UserQuery[/COLOR][COLOR= #007700]) !=[/COLOR] [COLOR= #0000BB]1[/COLOR][COLOR= #007700]){[/COLOR]
[COLOR= #FF8000]//Ook hier een code die redirect naar uitloggen[/COLOR]
[COLOR= #007700]}[/COLOR]
[URL="http://www.php.net/else"]else[/URL][COLOR= #007700]{[/COLOR]
[COLOR= #0000BB]$UserFetch[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_fetch_assoc"]mysql_fetch_assoc[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$UserQuery[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]login[/COLOR][COLOR= #007700]] =[/COLOR] [COLOR= #0000BB]$UserFetch[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]user[/COLOR][COLOR= #007700]];[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"DELETE FROM logins WHERE user = "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]login[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]" AND code != "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);
}
}[/COLOR]
[URL="http://www.php.net/else"]else[/URL][COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"DELETE FROM logins WHERE user = "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]login[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]" AND code != "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);
}
}[/COLOR]
?> In het kort wat hier gebeurd:
- Eerst controleren we of de Cooke of Session bestaat (of allebei), indien zo gaan we verder
- Als alleen de session bestaat word je uitgelogd: er is dan dus iets niet goed gegaan (vervang de code naar je pagina voor uitloggen!)
- Als alleen de cookie bestaat gaat hij controleren of de code en ip matchen met een rij in de tabel
- Zoja maakt hij een session aan, en verwijderd hij alle andere sessies van deze gebruiker
- Zonee logt hij je uit, je hebt een foutieve sessie
- Als de sessie en de cookie bestaan verwijderd hij alleen alle sessies van deze gebruiker
Zet deze code in een bestand dat op elke pagina voorkomt, je header bestand, en alles word keurig bij gehouden en je word ingelogd bij elk bezoek!
5. Uitloggen
Bij het uitloggen moet er nu iets meer gebeuren dan eerst.
Teneerste moet de Cookie verwijderd worden, en ook de sessie in de database:
[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"DELETE FROM logins WHERE code = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_COOKIE[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]" AND ip = "[/COLOR][COLOR= #007700].[/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REMOTE_ADDR[/COLOR][COLOR= #007700]].[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/setcookie"]setcookie[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]usercode[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000][/COLOR][COLOR= #007700],[/COLOR] [URL="http://www.php.net/time"]time[/URL][COLOR= #007700]()-[/COLOR][COLOR= #0000BB]3600[/COLOR][COLOR= #007700]);[/COLOR]
?> Zet dit bij je loguit script en het systeem is compleet!
6. Nawoord
Hou in de gaten dat systeem echt de basis is, er zijn nog veel meer opties hiervoor. Het kan bijvoorbeeld nog strakker werken, zodat zelfs alleen de sessie genoeg is, maar dit is niet altijd betrouwbaar.
Probeer vooral of je dit nog iets verder kan uitbreiden, en maak het je eigen
Ciaa
