J'utilise l'api spotify et pour une raison quelconque, leurs blocs de classe de session pour stocker mes propres données dans $ _SESSION. Pour contourner le problème, j'ai écrit une classe 'SystemHelper':

Espace de noms App;

    class SystemHelper
    {

        /**
         * if session_id is empty string, then session_id has not been initialized
         * then set session_id named 'session1'
         * start session needs 2 parameters, name and value
         * always close session after writing
         *
         * @param   string  $name   any given name
         * @param   [type]  $value  any given value
         *
         */
        public static function customSessionStore($name, $value)
        {
    
            if (session_id() == '') {
                session_id('session1');
            }
            session_start();
            $_SESSION[$name] = $value;
            session_write_close();
        }

Il est maintenant possible de stocker des données dans $ _SESSION mais le problème est que tant que je suis connecté avec mon compte (propre formulaire de connexion, pas de compte spotfiy), tout le monde est connecté, quel que soit le navigateur, l'adresse IP, etc. ...

Je ne sais pas comment cela peut être résolu. Session_id ne devrait-il pas générer un identifiant aléatoire? Quelqu'un peut aider s'il vous plaît?

Laissant de côté

            if (session_id() == '') {
                session_id('session1');
            }

Ne le résout pas car j'ai également besoin de lire et de supprimer les données stockées en session. Donc, en plus, j'ai dans cette solution de contournement:

    public static function customSessionRead($name)
        {

            if (session_id() == '') {
                session_id('session1');
            }
            session_start();
            session_write_close();

            return $_SESSION[$name];
        }

Et...

    public static function customSessionDestroy()
        {
            session_start();
            session_destroy();
        }
0
Wondarar 15 sept. 2020 à 16:36

2 réponses

Meilleure réponse

Résolu, en fait assez simple. Le problème d'abord: si écrit comme ceci:

    session_id('session1');

Dans les deux cas, customStore et customRead signifie simplement reprendre la session. Bien sûr, vous obtiendrez toujours les mêmes données, peu importe le navigateur, l'adresse IP, ...

Ce qui est résolu:

    session_create_id($name);

Donc, le plein encore:

public static function customSessionStore($name, $value)
{
    // if (session_id() == '') {
    //     session_id('session1');
    // }
    session_create_id($name);
    session_start();
    $_SESSION[$name] = $value;
    session_write_close();
}

Et,

public static function customSessionRead($name)
{
    // if (session_id() == '') {
    //     session_id('session1');
    // }
    session_start();
    session_write_close();
    return $_SESSION[$name];
}
0
Wondarar 17 sept. 2020 à 13:54

Si je comprends bien ... tous vos utilisateurs reçoivent le même session_id ().

Donc, techniquement, ils partagent une session. Autant que je sache, si vous démarrez une session, session_id () sera généré automatiquement. Vous n'avez donc pas besoin de définir vous-même session_id ().

Votre code devrait donc ressembler à ceci:

class SystemHelper
{

    /**
     * if session_id is empty string, then session_id has not been initialized
     * then set session_id named 'session1'
     * start session needs 2 parameters, name and value
     * always close session after writing
     *
     * @param   string  $name   any given name
     * @param   [type]  $value  any given value
     *
     */
    public static function customSessionStore($name, $value)
    {
        session_start();
        $_SESSION[$name] = $value;
        session_write_close();
    }
}
0
Yannick Eich 15 sept. 2020 à 13:42