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 :

comment relancer une session (stockée en bdd)


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Points : 112
    Points
    112
    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...

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    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

  3. #3
    Membre régulier Avatar de Goldocrack
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 126
    Points : 112
    Points
    112
    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...

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Re,
    Je ne vois pas où est la difficulté avec l'AJAX.
    T'en dis peut-être pas assez.

    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/01/2006, 10h55
  2. VBScript: Comment créer une session
    Par pierrot10 dans le forum VBScript
    Réponses: 11
    Dernier message: 27/12/2005, 17h48
  3. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55
  4. Comment relancer une fiche toujours en Maximize ?
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/01/2005, 15h03
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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