Faire persister les sessions

Messages postés
312
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
14 septembre 2004
- - Dernière réponse : cs_aureludo
Messages postés
22
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 mars 2007
- 9 févr. 2006 à 14:08
Salut à tous,

Je suis confronté à un problème concernant les sessions.

Voici comment se présente mon site :

Mon site est composé d'un ensemble de site qui ont chacun leur nom de domaine. (on va prendre le site-principal.com qui regroupe site-1.com et site-2.com). Mais ces sites sont stockés sur le même serveur FTP :
- site-principal.com pointe sur www/
- site-1.com pointe sur www/1/
- site-2.com sur www/2
Et ils prennent leurs données sur la même base de données.

J'ai fait un système de membre :

Le problème c'est qu'une session démarrée sur site-principal.com n'existe plus sur site-1.com.

Ma question est simple :

Comment faire pour garder la session d'un site à l'autre ?

-------------------------------
Life is a game, Enjoy ! ^^
Afficher la suite 

5 réponses

Messages postés
236
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
18 juillet 2006
1
0
Merci
je ne suis pas sure mais as tu essayer d'utiliser l'id de session d'un site à un autre.. !?

++

Le meilleur langage de programmation est un étudiant diplomé.. 8-)
Commenter la réponse de yafuka
Messages postés
312
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
14 septembre 2004
1
0
Merci
J'y ai pensé mais le seul moyen selon moi serait de le faire passer par l'URL, mais il faudrait que je change tous les liens ...
à moins que j'utilise la BDD mais par quel moyen ???

-------------------------------
Life is a game, Enjoy ! ^^
Commenter la réponse de Tomcube
Messages postés
236
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
18 juillet 2006
1
0
Merci
//un code tres interressant ci dessous qui provient d'un de mes livres. il s'agit d'une gestion de session avec utilisation de la base de donee.


Listing 21.5 : Sessions PHP avec enregistrement dans une base de données MySQL
<?php
    class mySession
    {

        private $dbLink;

        public function open()
        {
            if(!($this->dbLink = 
                mysql_connect("localhost", "httpd", "")))
            {
                return(FALSE);
            }
        
            //Sélection de la base de données puis test de l'opération
            if(!($dbResult = 
                mysql_query("USE test", $this->dbLink)))
            {
                return(FALSE);
            }

            return(TRUE);
        }

        public function close()
        {
            mysql_close($this->dbLink);
            return(TRUE);
        }

        public function read($id)
        {
            $Query = "SELECT SessionData " .
                "FROM session " .
                "WHERE ID = '" . addslashes($id) . "'";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }
            $dbRow = mysql_fetch_assoc($dbResult);

            //Signale que l'enregistrement de la session a été accédé
            $Query = "UPDATE session " .
                "SET " .
                "LastAction=NOW() " .
                "WHERE ID='".addslashes($id)."' ";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }

            return($dbRow['SessionData']);
        }

        public function write($id, $data)
        {
            //Crée la session si elle n'existe pas
            $Query = "INSERT IGNORE " .
                "INTO session (ID) " .
                "VALUES ('".addslashes($id)."')";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }

            //Actualise la session
            $Query = "UPDATE session " .
                "SET " .
                "SessionData='".addslashes($data)."', " .
                "LastAction=NOW() " .
                "WHERE ID='".addslashes($id)."' ";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }
            
            return(TRUE);
        }

        public function destroy($id)
        {
            $Query = "DELETE session " .
                "WHERE ID='".addslashes($id)."' ";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }

            return(TRUE);
        }

        public function garbage($lifetime) 
        {
            $Query = "DELETE session " .
                "WHERE (LastAction + $lifetime) < NOW() ";
            if(!($dbResult = mysql_query($Query, $this->dbLink)))
            {
                return(FALSE);
            }

            return(TRUE);
        }

    }

    $s = new mySession();

    session_set_save_handler(
        array($s, 'open'),
        array($s, 'close'),
        array($s, 'read'),
        array($s, 'write'),
        array($s, 'destroy'),
        array($s, 'garbage')
        );

    //Démarrage de la session
    session_start();

    //Incrémente le compteur à chaque chargement d'une page
    if(isset($_SESSION['Count']))
    {
        $_SESSION['Count']++;
    }
    else
    {
        //start with count of 1 
        $_SESSION['Count'] = 1;
    }

    //Connexion à la base de données 
    if(!($dbLink = mysql_connect("localhost", "httpd", "")))
    {
        print("Couldn't connect to database!
\n");
    }

    //Sélection de la base de données puis test de l'opération
    if(!($dbResult = mysql_query("USE test", $dbLink)))
    {
        print("Couldn't use test database!
\n");
    }

    //Si l'utilisateur modifie l'ID invoice, mettre à jour
    //la colonne et celle de la session
    if(isset($_REQUEST['invoice']))
    {
        //Assure que les données invoice sont des entiers
        $_REQUEST['invoice'] = (integer)$_REQUEST['invoice'];

        if(!($dbLink = mysql_connect("localhost", "httpd", "")))
        {
            print("Couldn't connect to database!
\n");
        }
    
        //sélection de la base de données puis test de l'opération
        if(!($dbResult = mysql_query("USE test", $dbLink)))
        {
            print("Couldn't use test database!
\n");
        }

        $Query = "UPDATE session " .
            "SET Invoice={$_REQUEST['invoice']} " .
            "WHERE ID = '" . session_id() . "' ";
        if(!($dbResult = mysql_query($Query, $dbLink)))
        {
            print("Couldn't update invoice!
\n");
        }

        $Invoice = $_REQUEST['invoice'];
    }
    else
    {
        //récupération de la valeur invoice
        $Query = "SELECT Invoice FROM session " .
            "WHERE ID = '" . session_id() . "' ";
        if(!($dbResult = mysql_query($Query, $dbLink)))
        {
            print("Couldn't get invoice!
\n");
        }
        $dbRow = mysql_fetch_assoc($dbResult);
        $Invoice = $dbRow['Invoice'];
    }
?>
<html>
<head>
<title>Listing 21-5</title>
</head>

<?php
    print("You have viewed this page {$_SESSION['Count']}
        times!
\n");
    print("Current Invoice: $Invoice
\n");
    
    //Affiche le formulaire de récupération du nom
    print("<form " .
        "action="{$_SERVER['PHP_SELF']}" " .
        "method="post">" .
        "\n" .
        "
\n" .
        "</form>");
    
    //Affichage d'un lien permettant de recharger cette page
    print("reload
\n");
?>

</html>



Le meilleur langage de programmation est un étudiant diplomé.. 8-)
Commenter la réponse de yafuka
Messages postés
312
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
14 septembre 2004
1
0
Merci
Mais à première vue ça ne résout pas mon problème ...

-------------------------------
Life is a game, Enjoy ! ^^
Commenter la réponse de Tomcube
Messages postés
22
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 mars 2007
0
Merci
Bonjour,

As tu trouvé une solution a ton problème car je suis exactement confronté au même problème moi cf le post http://www.phpcs.com/forum.v2.aspx?ID=658870

Merci d'avance pour ta réponse ?

@+
Auréludo
Commenter la réponse de cs_aureludo