Partage de session PHP, dans une tentative désespérée d'exécuter du code dans une portée différente

StackOverflow https://stackoverflow.com/questions/7430114

  •  30-10-2019
  •  | 
  •  

Question

Je me demande pourquoi quelque chose comme ça ne fonctionnerait pas (en fait, ne fonctionne pas):

4.php :

<php
session_start();

$my_id = session_id();

$_SESSION['username'] = (($_SESSION['username'] == 'nimic') ? 's-a schimbat' : $_GET['test']);

file_put_contents('comm.g', PHP_EOL.$my_id, FILE_APPEND);

sleep(3); // can be left out

echo $_SESSION['username'];

?>

4.Php est une page simple qui ne définit que le composant "nom d'utilisateur" de $ _Session, puis écrit l'ID de session dans un fichier, après quoi il fait écho à la valeur $ _Session ['' nom d'utilisateur '].

Alors:

3.php :

<php

while(true)
{
    if(file_exists("comm.g"))
    {
        $c = file("comm.g");
        unlink("comm.g");

        session_start();
        foreach($c as $k => $v)
        {
            if($v != '')
            {
                $my_id = session_id();
                session_write_close();
                session_id($v);
                session_start();
                file_put_contents("result.cc", $_SESSION['username'].'---'.$v.'END'.PHP_EOL.PHP_EOL, FILE_APPEND);
                $_SESSION['username'] = 'somethingelse';
                session_id($my_id);
                session_start();
            }
        }
        session_write_close();
    }
}
?>

3.Php est exécuté par un cronjob, chaque minute, pendant environ 30 secondes (jusqu'à ce que le serveur le tue). De toute façon dans result.cc Je trouve (dans ces 30 secondes disponibles) le résultat attendu ... la valeur de $ _get ['test'].

Mais il ne modifie pas la valeur de $ _Session ['nom d'utilisateur'], je ne m'attendais même pas à ce qu'un tel comportement en fait, je savais que le sommeil ne suffirait pas, mais quand même, sur un actualisation ne devrait-il pas être modifié? ...

Je sais que mon code est horrible, c'est juste un test, si cela fonctionne, il serait amélioré.

Mais je ne semble pas comprendre. Qu'est-ce que je fais mal? En fait, je fais beaucoup de choses mal, le système lui-même ne devrait pas être utilisé comme ça, je le sais aussi, mais quand même, c'est ma seule option. J'ai des idées plus compliquées sur cette chose, mais si cela ne fonctionne pas, les autres ne fonctionneront pas non plus.

Mon intention est en fait d'exécuter du code dans un thread séparé afin que je puisse échapper à certaines modifications (comme enregistrer un wrapper pour le schéma de fichiers, et n'ayant aucun pouvoir de désinscrire (restaurer) quand j'en ai besoin, à l'intérieur de la classe de wrapper qui est) que J'ai fait là-bas. Méthode peu orthodoxe, je sais ...

Alors, pouvez-vous aider avec des idées? Merci.

Modifier 1

Même si vous me conduisez à une idée intéressante @ La réponse de Ben n'était pas exacte ... en fait, dans les cookies, il ne reste que l'identifiant de session, j'ai remplacé le besoin de cookies en utilisant un fichier, afin que le cronjob sache quelle session devrait être modifiée, J'ai obtenu la bonne valeur pour $ _SESSION [«nom d'utilisateur»] pour toutes les sessions «enregistrées», mais même ainsi, je n'ai pas pu modifier les putain de valeurs, c'était comme s'ils étaient marqués en lecture. Maintenant, reconsidérant, j'ai trouvé l'idée toujours sur ses pieds, étant viable et une solution. Donc, mes questions sont toujours en place ... Pourquoi cela ne fonctionnerait-il pas?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top