Classe "remplaçant" les sessions php (avec vérification de l'adresse ip)

Soyez le premier à donner votre avis sur cette source.

Vue 8 709 fois - Téléchargée 962 fois

Description

Voici une classe PHP(5) de sessions.
C'est le même principe que les sessions PHP sauf qu'ici, il y a une vérification de l'adresse IP et une clé plus longue pour éviter les "vols" de sessions.
Les sessions sont stockées sous forme de fichiers textes (fichiers .sess) dans un répertoire donné.

La classe gère aussi le "temps de vie" (expiration) des sessions.

Vous pouvez gèrer plusieurs sessions en même temps grâce aux noms de sessions (pareil qu'avec les sessions PHP).

La clé est passée de page en page via les cookies ou par l'URL si ceux-ci ne sont pas acceptés par le navigateur du client.

Le ZIP contient :
- la classe en elle-même (session.class.php)
- un exemple d'utilisation (exemple.php)
- le "session cleaner" (sessioncleaner.php)
- une documentation (session.doc.pdf)

Qu'est-ce que le "session cleaner" ?
Tout simplement, il peut rester quelques vieux fichiers .sess lors de bugs, de tests, de vieilles sessions qui n'ont pas été correctement "destroy" ou autres ... Ce fichier est à executer régulièrement (via des tâches CRON par exemple). Il va supprimer toutes les vieilles sessions qui ont expiré.

Vous pouvez retrouver plus d'informations sur l'utilisation de la classe dans le fichier session.doc.pdf.

Conclusion :


Bugs / problèmes connus :
- Pour que la détection d'acceptation des cookies par le navigateur client fonctionne correctement, vous devez, avant de faire appel à la classe, envoyer un cookie "cookieAccept" ayant la valeur "true" au client. Si non, la classe va croire que le client n'accèpte pas les cookies.
En effet, pour détecter si le client accèpte ou non les cookies, j'utilise le principe tout simple du "on envoie un cookie et on le lit". Le problème est que, lors de l'envoie du cookie, pour le lire, il faut rafraichir la page...
Pour remédier au problème, il vous suffit de, par exemple sur la page d'accueil de votre site faire :
setcookie('cookieAccept','true',time()+3600*24*365);

Points méritants d'être modifiés / optimisés :
- Le système du "sessioncleaner.php"...
En effet, par exemple, si un visiteur va sur une page utilisant la classe et la quitte... La session en cours n'a donc pas pû être destroy(). J'ai donc eu l'idée de faire un script supprimant ce types de sessions (expirées).
Mais bon, ce n'est pas très pratique d'appeler un script régulièrement comme ça. Si vous avez des idées pour optimiser ce point ça m'arrangerai ;)

Bon, je pense que j'ai tout dit, je vous invite maintenant à télécharger le fichier ZIP ;)
Si vous avez des commentaires, idées, n'hésitez pas !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
lundi 28 mai 2007
Statut
Membre
Dernière intervention
24 avril 2008

Salut,
Je trouve que c'est une très bonne source, cependant pour les sessions, on ne peux pas se fier aux adresses ip, pourquoi ne pas rajouter tout simplement un vérification de l'user agent?

Tu pourrais rajouter 2-3 lignes pour la configuration des sessions par exemple pour la durée.

Et enfin, la durée maximum ne change jamais, je m'explique : tu utilises un $sessionTTL=time()+durée de la session que tu compares à chaque fois, mais si l'utilisateur reste 2h sur le site il devra se reconnecter puisque dans le fichier la durée $sessionTTL du fichier ne change jamais.

Et enfin pourquoi ne ferais tu pas la class avec les sessions de php?
Messages postés
5
Date d'inscription
dimanche 26 juin 2005
Statut
Membre
Dernière intervention
16 juillet 2007

Salut a tous
ça commence 0 dater un peu ce sujet !
Enfin bon je voulais juste laisser une adresse qui me semble intéressante. Je suis trop novice pour participer au débat ou encore même dire que le lien que je le laisse relate de choses bien conçues.

Mais enfin je le laisse quand même : http://php.developpez.com/cours/sessions/?page=plus

Voila soyez pas trop dur avec thomvaill. Il a tenté un truc qu'il pensait être utile et fiable.

"C'est de ces erreurs qu'on apprend..."
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
ah ui en effet, j'avais oublié le (// code enlevé :p)
Messages postés
331
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
10 février 2009

FhX, suivant le code qu'il a, il doit d'abord exécuté le code, sinon il ne casserait pas la boucle après son code non ?
Donc ton while serait mauvais dans le cas présent (j'ai pas tout tout regardé non plus).

Par contre, je suis d'accord, je ne vois pas pourquoi posséder plusieurs sessions par page .... :/
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Même pas :

while ( $this->sessionExists($sessionName, $ID) );

Une ligne, ca suffit quelque fois :)


Mais bon, les sessions, ca reste 1 session par page :) Je vois pas pourquoi en faire plus d'une ^^
Afficher les 31 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.