IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tester l'existence d'une session à partir de son ID


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Tester l'existence d'une session à partir de son ID
    Bonjour à tous,

    Comme indiqué dans le titre, j'aimerais savoir comment demander à un serveur Apache si une session existe, à partir d'un identifiant.

    J'ai trouvé quelques sujets sur ce thème, mais sans réponse vraiment satisfaisante.


    Pour vous expliquer le contexte, j'ai besoin de cette fonctionnalité car je développe un site web permettant aux utilisateurs de modifier du contenu (des articles par exemple). Par sécurité, je veux mettre en place un système de "protection en écriture", pour qu'au plus un seul utilisateur puisse modifier un contenu.

    Dans l'absolu, l'utilisateur obtient l'accès à la ressource en cliquant sur "ouvrir", et la restitue en cliquant sur "fermer". Mais bien évidemment, rien ne l'empêche de quitter sans rien faire, bloquant la ressource indéfiniment. Pour palier à ce problème, je pensais créer une table associant chaque ressource bloquée à un identifiant de session. De cette façon, il est possible de vérifier si la ressource est légitimement bloquée ou non.

    Et c'est là que vous intervenez !

    Merci de m'avoir lu, et merci d'avance pour votre aide !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux controler l'existence du fichier de session ; malheureusement, il n'est pas supprimé à la destruction de la session.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci pour ta réponse !

    Hum, évidemment, ce serait trop simple ...

    Je me suis un peu documenté, et j'ai cru comprendre que les fichiers de session étaient nettoyés plus ou moins aléatoirement. Existe-t-il un moyen de "forcer la main" au serveur ?

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    vous avez un moyen un peu alambiqué, mais qui fonctionne bien, qui vous permettra de nettoyer tout ce qu'a pu faire votre utilisateur lors de sa session.

    En javascript, trappez l'évenement de fermeture de votre fenêtre. Si cet évènement est levé, faites un appel ajax au serveur et là, faites le grand nettoyage.

    si vous utilisez jquery, le code suivant devrait suffire. A vous ensuite de l'adapter et de développer le nettoyage côté serveur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    		<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
    		<script type="text/javascript">
    			$(window).load(function(){
    				....
    				$(window).bind("beforeunload",function(){
    					alert('Window is closing, we are going to flush session values');
    				    $.ajax({url: 'http://test.localhost/application.php/grand_nettoyage',
    				            type: 'POST',
    				            success: function(data) {
    					            	alert('flushing ok');
                    				}
                    	});
    				});
    			});
    		</script>
    Attention, l'évènement en question est aussi levé lors de la validation de formulaire ou encore sur le click d'un lien. Donc il serait judicieux de garder un indicateur permettant de savoir que la fermeture n'est pas due à une soumission de formulaire ou encore à un click sur un lien.

    Je vous laisse développer ça. En JQuery, c'est trivial. En javascript pur, un peu moins, mais pas loin.

  5. #5
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Une méthode alternative (qui n'est pas parfaite non plus) serait d'enregistrer pour chaque session la date de la dernière activité. Et donc de définir un temps pour lequel on choisi de dire que la session n'est plus active.
    Et donc prévoir un processus à part (en cron par exemple) qui irait nettoyer les contenus bloqués par une session non active.

    Au moins ce processus ne se base pas sur du js/navigateur.
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    Vous pouvez récupérer l'ID des sessions à l'aide de la fonction session_id(), et ensuite faire ton traitement.

    Bonne chance

Discussions similaires

  1. Tester l'existence d'une session
    Par fayred dans le forum Langage
    Réponses: 2
    Dernier message: 21/09/2007, 11h31
  2. Désérialisation d'une session à partir de son fichier
    Par buzzkaido dans le forum Langage
    Réponses: 7
    Dernier message: 06/07/2007, 10h17
  3. Réponses: 2
    Dernier message: 08/09/2006, 10h07
  4. Tester l'existence d'une session
    Par waterbed dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 04/08/2006, 14h44
  5. Comment tester l'existence d'une session ?
    Par watcha2020 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/07/2006, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo