PHP gevorderde |
|
Over het cookie zie je helemaal goed, volgens mij. De sessie kan je alleen 'terug' halen door middel van cookies. Hier een stuk code wat ik zelf gebruik:
<?php
// Controleren of de sessie al bezig is of niet en kijk of eer een
// login cookie geplaatst is op de client PC.
if (!isset($_SESSION['login']) && isset($_COOKIE['cookie'])) {
// Cookie gevonden, sessie niet actief. Stop de
// inhoud van cookie in $info array
$info = explode('%', $_COOKIE['cookie']);
// kijken of de info uit cookie
// een bestaande gebruiker is
$u_info = mysql_query("
SELECT uid, gid, last_ip, level
FROM users
WHERE uid = ".$info[0]." AND passwd = '".$info[1]."'
");
// Was de gebruiker met het cookie
// gevonden in de database? Als het
// aantal meer dan 0 is zal het wel toch?
if (mysql_num_rows($u_info) > 0) {
// Controleren of last_ip en het huidige
// IP adres overeen komen, is dit niet zo
// bestaat de kan dat het een vervalst of
// gestoolen cookie is, laat dan de sessie
// nietmeer opnieuw startten.
if (mysql_result($u_info, 0, "last_ip") === get_ip()) {
// gegevens in Cookie waren van een
// bestaande gebruiker, laat de sessie
// opnieuw beginnen.
$_SESSION['login'] = true;
$_SESSION['uid'] = mysql_result($u_info, 0, "uid");
// Het gebruikers niveau, hier kan later naar gekeken worden, wat de gebruiker wel
// of niet mag, voor de toekenning wor nog gekeken of de gebruiker lid is
// van een bepaalde groep, als dit zo is kijk of de groeps-rechten hoger zijn
// dan zijn eigen rechten. Als zijn eigen rechten lager zijn vervallen deze, de
// gebruiker heeft namelijk via de groep al alle mogelijkheden. Is de gebruiker
// niet lid van een groep of de gebruiker heeft nog extra rechten dan vervallen
// de groepsrechten, omdat gebruiker alles al mag doen vanuit de eigen rechten.
$_SESSION['level'] = ($u_info['gid'] > $u_info['level']) ? $u_info['gid'] : $u_info['level'];
// Reset het login cookie, zodat deze weer langer geldig is
setcookie('cookie', $info[0] . '%' . $info[1] . '%' . $info[2], time() + $info[2]);
}
}
}
?>
<?php // Controleren of de sessie al bezig is of niet en kijk of eer een // login cookie geplaatst is op de client PC. if (!isset($_SESSION['login']) && isset($_COOKIE['cookie'])) { // Cookie gevonden, sessie niet actief. Stop de // inhoud van cookie in $info array $info = explode('%', $_COOKIE['cookie']); // kijken of de info uit cookie // een bestaande gebruiker is SELECT uid, gid, last_ip, level FROM users WHERE uid = ".$info[0]." AND passwd = '".$info[1]."' "); // Was de gebruiker met het cookie // gevonden in de database? Als het // aantal meer dan 0 is zal het wel toch? // Controleren of last_ip en het huidige // IP adres overeen komen, is dit niet zo // bestaat de kan dat het een vervalst of // gestoolen cookie is, laat dan de sessie // nietmeer opnieuw startten. // gegevens in Cookie waren van een // bestaande gebruiker, laat de sessie // opnieuw beginnen. $_SESSION['login'] = true; // Het gebruikers niveau, hier kan later naar gekeken worden, wat de gebruiker wel // of niet mag, voor de toekenning wor nog gekeken of de gebruiker lid is // van een bepaalde groep, als dit zo is kijk of de groeps-rechten hoger zijn // dan zijn eigen rechten. Als zijn eigen rechten lager zijn vervallen deze, de // gebruiker heeft namelijk via de groep al alle mogelijkheden. Is de gebruiker // niet lid van een groep of de gebruiker heeft nog extra rechten dan vervallen // de groepsrechten, omdat gebruiker alles al mag doen vanuit de eigen rechten. $_SESSION['level'] = ($u_info['gid'] > $u_info['level']) ? $u_info['gid'] : $u_info['level']; // Reset het login cookie, zodat deze weer langer geldig is setcookie('cookie', $info[0] . '%' . $info[1] . '%' . $info[2], time() + $info[2]); } } } ?>
--edit: de bedoeling was dat het HIER cookie heet. |