Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 10h18   #1
Invité de passage
 
Inscription : avril 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 7
Points : 2
Points : 2
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 !
Jilimay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 13h53   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux controler l'existence du fichier de session ; malheureusement, il n'est pas supprimé à la destruction de la session.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 09h11   #3
Invité de passage
 
Inscription : avril 2011
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 7
Points : 2
Points : 2
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 ?
Jilimay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h57   #4
Membre actif
 
Homme Fabrice Agnello
Développeur informatique
Inscription : octobre 2010
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Agnello
Âge : 39
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 : 76
Points : 161
Points : 161
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 :
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.
Agnello Fabrice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h12   #5
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
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
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h17   #6
Futur Membre du Club
 
Homme Ahmed
Ingénieur systèmes et réseaux
Inscription : octobre 2007
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Ahmed
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
Bonjour,
Vous pouvez récupérer l'ID des sessions à l'aide de la fonction session_id(), et ensuite faire ton traitement.

Bonne chance
ahmedious est déconnecté   Envoyer un message privé Réponse avec citation 02
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h06.


 
 
 
 
Partenaires

Hébergement Web