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 13/05/2011, 12h26   #1
Membre régulier
 
Avatar de Goldocrack
 
Inscription : novembre 2002
Messages : 120
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2002
Messages : 120
Points : 83
Points : 83
Par défaut comment relancer une session (stockée en bdd)

Bonjour à tous,

Je me pose aujourd'hui une question simple :
Comment peux-t'on retravailler avec une session stockée en bdd (côté serveur donc) quand l'utilisateur (avec script de connexion) revient sur la page ?

Voici mon fonctionnement et idée actuelle :

J'utilise session_set_save_handler pour traiter mes sessions côté bdd serveur.
Je stocke l'id_session, les donnees_session, la dateexpiration_session et l'identifiant (pour le dernier c'est plus compliqué que ça mais l'explication ne ferait que complexifier l'histoire).

Le but est que l'utilisateur se connecte la toute première fois : la session est créée et stockée en bdd.
Il navigue, on stocke au fur et à mesure les données_session.
Il quitte son navigateur, sa maison et part chez un collègue.
De ce nouveau poste, il se connecte et à partir de là, mon script de session reconnait que c'est le même identifiant validé, je cherche à se moment à ré-utiliser la session qu'il avait auparavant.

Comment puis-je faire pour forcer l'ancienne session à se transformer en l'ancienne (récupération des données_session) pour avoir une continuation dans l'utilisation ?

Merci d'avance.


Précision : la date d'expiration ne servira pas ici à supprimer complètement la ligne de session de la bdd mais plutôt à la désactiver (en supprimant l'id_session par ex) pour éviter une récupération pirate.
__________________
  • Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils (ça ce sont les attributs de la magie). [Dave Small]
  • Un programme c'est un sort que l'on jette à un ordinateur et qui se transforme en messages d'erreur.
  • Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.

et ne sont pas des options...
Goldocrack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 12h46   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Dans ta BdD il faut lier sessions et utilisateurs.

Exemple :

users
------------
user_id
user_nickname
user_password
...

sessions
------------
session_id
session_user # Clef étrangère sur users.user_id
...

A l'authentification de l'utilisateur tu vérifies dans la table sessions si l'utilisateur possède une session, si oui tu la charges.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h48   #3
Membre régulier
 
Avatar de Goldocrack
 
Inscription : novembre 2002
Messages : 120
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2002
Messages : 120
Points : 83
Points : 83
Par défaut pas si simple

Salut et merci de ta première réponse.

Malheureusement ce n'est pas aussi simple : je travaille dans un environnement javascript (jquery) et php (requête ajax).

La première fois que je me connecte, l'ajax passe sur un fichier de connexion, qui traite la mise à jour de la session, le chargement des données et la mise à jour de l'id sur le nouveau id de session (si j'arrive à confirmer que ça marche).

Ensuite, les pages php (toujours appelées par l'ajax) ne doivent pas se baser sur le pseudo (trop facile à modifier côté client) et du coup se base sur l'identifiant de session (celui modifié à la volée la première fois).

J'ai également un soucis de garbage collector pour les sessions.
En effet, les sessions trop vieilles doivent être désactivées dans la bdd sans être supprimée (sinon perte de données).
Il existe une requête sql pour remplacer l'id_session par un texte du style "out_".$pseudo ou pseudo serait remplacé par le pseudo de la session à désactiver.
Une requête imbriquée ??? (je préfèrerai plutôt que surcharger la bdd de plusieurs requêtes).

UPDATE table SET id_session='out".$pseudo."' WHERE dateexpiration_session<".time();

Il faudrait que j'arrive à imbriquer une requête SELECT dedans pour recupérer à chaque fois le pseudo concerné.

Une idée ?
__________________
  • Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils (ça ce sont les attributs de la magie). [Dave Small]
  • Un programme c'est un sort que l'on jette à un ordinateur et qui se transforme en messages d'erreur.
  • Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.

et ne sont pas des options...
Goldocrack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h06   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Re,
Je ne vois pas où est la difficulté avec l'AJAX.
T'en dis peut-être pas assez.

Citation:
J'ai également un soucis de garbage collector pour les sessions.
En effet, les sessions trop vieilles doivent être désactivées dans la bdd sans être supprimée (sinon perte de données).
Il existe une requête sql pour remplacer l'id_session par un texte du style "out_".$pseudo ou pseudo serait remplacé par le pseudo de la session à désactiver.
Une requête imbriquée ??? (je préfèrerai plutôt que surcharger la bdd de plusieurs requêtes).

UPDATE table SET id_session='out".$pseudo."' WHERE dateexpiration_session<".time();

Il faudrait que j'arrive à imbriquer une requête SELECT dedans pour recupérer à chaque fois le pseudo concerné.

Une idée ?
Tu peux faire une jointure sur ton UPDATE pour récupérer le pseudo ( http://dev.mysql.com/doc/refman/5.0/fr/update.html )
Une sous-requête est également possible ( http://dev.mysql.com/doc/refman/5.0/...ubqueries.html )
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h12.


 
 
 
 
Partenaires

Hébergement Web