Utiliser une base de données pour sécuriser vos sessionsDate de publication : 28/08/2006
4. Les Fonctions
4.1. Fonction openSession()
4.2. Fonction getLoginCheck()
4.3. Fonction getUserInfo()
4.4. Fonction getFormView()
4.5. Fonction getMsg()
4.6. Fonction dbClean()
4.7. Fonction closeSession()
4. Les Fonctions
4.1. Fonction openSession()
Cette fonction va supprimer l'ancien enregistrement de la session
qui correspond au même userid. Ensuite, elle va re-générer
l'identifiant de session (pour des mesures de sécurité). Et va insérer
le nouvel identifiant dans la base de données.
Vous pouvez trouver dans ce code une utilisation des fonctions getIP() et
getBrowser(). Ces deux fonctions ne sont pas décrites ici mais vous pourrez
en trouver un équivalant sur developpez.com (dans les Sources de PHP et
dans la FAQ PHP).
fonction openSession() |
function openSession($ userid ) {
global $ db ;
$ deleteSQL = $db ->prepare (' DELETE FROM ' . PREFIX_DB_SITE. ' session
WHERE userid = :userid ' );
$deleteSQL ->execute (array (' :userid ' = > $ userid ));
session_regenerate_id();
$ insertSQL = $db ->prepare (' INSERT INTO ' . PREFIX_DB_SITE. ' session (sid, userid, ip, browser)
VALUES (:sid, :userid, :ip, :browser) ' );
$insertSQL ->execute (array (' :sid ' = > session_id(),
' :userid ' = > $ userid ,
' :ip ' = > getIP(),
' :browser ' = > getBrowser(),
));
return TRUE ;
}
|
4.2. Fonction getLoginCheck()
Cette fonction va vérifier si le couple username/password est correct.
Elle n'a pas d'intérêt direct avec ce tutorial.
fonction getLoginCheck() |
function getLoginCheck($ username , $ password ) {
global $ db ;
$ username = addslashes(trim($ username ));
$ password = md5(addslashes(trim($ password )));
if (empty($ username ) & & empty($ password )) {
return FALSE ;
} else {
$ sql = $db ->prepare (' SELECT id FROM ' . PREFIX_DB_SITE. ' user
WHERE username = :username
AND password = :password ' );
$sql ->execute (array (' :username ' = > $ username ,
' :password ' = > $ password ,
));
$ userdata = $sql ->fetch (PDO: : FETCH_ASSOC );
if (! empty($ userdata )) {
$ userdata = $ userdata [ ' id ' ] ;
} else {
$ userdata = FALSE ;
}
return $ userdata ;
}
}
|
4.3. Fonction getUserInfo()
Récupère les informations contenues dans la table 'site_users'
en fonction de l'id de session.
fonction getUserInfo() |
function getUserInfo() {
global $ db ;
$ sql = $db ->prepare (' SELECT u.id, u.active, u.date, u.last_modified, u.username, u.country,
u.gender, u.birthday, u.avatar
FROM site_session s
INNER JOIN site_user u
ON s.sid = :sid
AND s.userid = u.id ' );
$sql ->execute ( array (' :sid ' = > session_id()) );
$ userdata = $sql ->fetch (PDO: : FETCH_ASSOC );
if (empty($ userdata )) {
$ userdata = FALSE ;
}
return $ userdata ;
}
|
4.4. Fonction getFormView()
Cette fonction affiche le formulaire d'identification.
Comme la fonction getLoginCheck(), il n'y a pas de rapport direct
avec ce tutorial.
fonction getFormView() |
function getFormView() {
$ view = ' <form enctype="multipart/form-data" action=" ' . $ _SERVER [ ' PHP_SELF ' ] . ' " method="post" id="form"> ' . " \n " ;
$ view . = ' <label for="username">Username </label> ' . textfield(' username ' ). " \n " ;
$ view . = ' <label for="password">Password </label> ' . textfield(' password ' ). " \n " ;
$ view . = button(' subit ' , ' Envoyer ' ). " \n " ;
$ view . = ' </form> ' ;
echo $ view ;
}
|
4.5. Fonction getMsg()
Cette fonction affiche tout simplement une message de bienvenue en cas
de succès d'identification.
Comme les fonctions getLoginCheck() et getFormView, il n'y a pas de rapport
direct avec ce tutorial.
fonction getMsg() |
function getMsg($ username ) {
$ view = $ username . ' ' ;
if (empty($ _POST [ ' closeSession ' ] )) {
$ view . = ' <form enctype="multipart/form-data" action=" ' . $ _SERVER [ ' PHP_SELF ' ] . ' " method="post" id="form"> ' . " \n " ;
$ view . = button(' closeSession ' , ' Fermer la session ' ). " \n " ;
$ view . = ' </form> ' ;
} else {
closeSession();
}
return $ view ;
}
|
4.6. Fonction dbClean()
Cette fonction permet de supprimer à chaque succès d'identification
les entrées vieilles d'au moins 2 jours.
fonction dbClean() |
function dbClean() {
global $ db ;
$ limit = date(' Y-m-d H-i-s ' , mktime(0, 0, 0, date(' m ' ), date(' d ' ) - 2, date(' Y ' )));
$ cleanSQL = $db ->prepare (' DELETE FROM ' . PREFIX_DB_SITE. ' session
WHERE last_modified < :limit ' );
$cleanSQL ->execute ( array (' :limit ' = > $ limit ) );
}
|
4.7. Fonction closeSession()
Cette fonction permet de fermer une session en cours en supprimant son entrées dans la
base de données et actualise la page.
fonction closeSession() |
function closeSession() {
global $ db ;
$ deleteSQL = $db ->prepare (' DELETE FROM ' . PREFIX_DB_SITE. ' session
WHERE sid = :sid ' );
$deleteSQL ->execute ( array (' :sid ' = > session_id()) );
echo ' <meta http-equiv="Refresh" content="0; ' . $ _SERVER [ ' PHP_SELF ' ] . ' "> ' ;
}
|
Copyright ©2006 Adrien Pellegrini.
Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérets. Cette page est déposée à la SACD.
|