Question

J'essaie d'écrire une session personnalisée persister en PHP. Mais pour une raison quelconque, seule ma fonction de lecture de session est appelée, pas ma fonction d’écriture de session. Ainsi, la session n'est pas persistée. Si je reviens au gestionnaire de session par défaut (fichier), tout fonctionne. Si j'ajoute session_write_close () à la fin du script de test, tout fonctionne. Mais le manuel de PHP stipule explicitement qu'il n'est pas nécessaire d'appeler explicitement le session_write_close () car il est appelé automatiquement à la fin du script. Et je ne veux pas mettre session_write_close () à chaque point de sortie possible de mon application existante!

Voici un code qui illustre le problème. Je l'exécute sur WinXP SP3 + Apache 2.2.9 + PHP 5.2.6. Le fichier journal ne contient que des entrées pour s_open () et s_read () .

<?php
function logger($str)
{
    file_put_contents('session_log.txt', date('Y-m-d h:i:s') . " $str\r\n", FILE_APPEND);
}

function s_open()
{
    logger('s_open');
    return true;
}

function s_close()
{
    logger('s_close');
    return true;
}

function s_read()
{
    logger('s_read');
    return @file_get_contents('session.txt');
}
function s_write($id, $data)
{
    logger("s_write: $id - $data");
    file_put_contents('session.txt', $data);
    return true;
}

function s_destroy()
{
    logger('s_destroy');
    return true;
}

function s_gc()
{
    logger('s_gc');
    return true;
}

session_set_save_handler('s_open', 's_close', 's_read', 's_write', 's_destroy', 's_gc');

session_start();

if ( isset(

J'essaie d'écrire une session personnalisée persister en PHP. Mais pour une raison quelconque, seule ma fonction de lecture de session est appelée, pas ma fonction d’écriture de session. Ainsi, la session n'est pas persistée. Si je reviens au gestionnaire de session par défaut (fichier), tout fonctionne. Si j'ajoute session_write_close () à la fin du script de test, tout fonctionne. Mais le manuel de PHP stipule explicitement qu'il n'est pas nécessaire d'appeler explicitement le session_write_close () car il est appelé automatiquement à la fin du script. Et je ne veux pas mettre session_write_close () à chaque point de sortie possible de mon application existante!

Voici un code qui illustre le problème. Je l'exécute sur WinXP SP3 + Apache 2.2.9 + PHP 5.2.6. Le fichier journal ne contient que des entrées pour s_open () et s_read () .

<*>SESSION['time']) ) echo 'Session time: ' . date('Y-m-d h:i:s',

J'essaie d'écrire une session personnalisée persister en PHP. Mais pour une raison quelconque, seule ma fonction de lecture de session est appelée, pas ma fonction d’écriture de session. Ainsi, la session n'est pas persistée. Si je reviens au gestionnaire de session par défaut (fichier), tout fonctionne. Si j'ajoute session_write_close () à la fin du script de test, tout fonctionne. Mais le manuel de PHP stipule explicitement qu'il n'est pas nécessaire d'appeler explicitement le session_write_close () car il est appelé automatiquement à la fin du script. Et je ne veux pas mettre session_write_close () à chaque point de sortie possible de mon application existante!

Voici un code qui illustre le problème. Je l'exécute sur WinXP SP3 + Apache 2.2.9 + PHP 5.2.6. Le fichier journal ne contient que des entrées pour s_open () et s_read () .

<*>SESSION['time']); else echo 'Session empty'; echo '<br>'; echo 'Session ID: ' . session_id();

J'essaie d'écrire une session personnalisée persister en PHP. Mais pour une raison quelconque, seule ma fonction de lecture de session est appelée, pas ma fonction d’écriture de session. Ainsi, la session n'est pas persistée. Si je reviens au gestionnaire de session par défaut (fichier), tout fonctionne. Si j'ajoute session_write_close () à la fin du script de test, tout fonctionne. Mais le manuel de PHP stipule explicitement qu'il n'est pas nécessaire d'appeler explicitement le session_write_close () car il est appelé automatiquement à la fin du script. Et je ne veux pas mettre session_write_close () à chaque point de sortie possible de mon application existante!

Voici un code qui illustre le problème. Je l'exécute sur WinXP SP3 + Apache 2.2.9 + PHP 5.2.6. Le fichier journal ne contient que des entrées pour s_open () et s_read () .

<*>SESSION['time'] = time(); ?>
Était-ce utile?

La solution

Blargh! A été pris sur un avis que PHP lui-même avait mis là! Pour citer le manuel:

  

Avertissement

     

Le répertoire de travail actuel est modifié avec certaines SAPI si la session est fermée lors de la fin du script. Il est possible de fermer la session plus tôt avec session_write_close () .

Il était en train de changer et les appels à s_write () et s_close () ont été enregistrés dans un autre répertoire!

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