web-dev-qa-db-fra.com

Comment devriez-vous accrocher une session_start () lors de la création d'un plugin?

Pour en savoir plus sur les sessions que j'ai recueillies, une session_start() devrait venir directement après le <?php per Où placer exactement un SESSION_START? et je voulais jouer et créer un plugin qui ajouterait un session_start() à header.php après que ce soit <?php, mais après une recherche, j’ai compris de tenter de trouver la procédure appropriée à suivre.

J'ai cherché session mais j'ai vu une variété de questions et réponses qui semblent principalement utiliser:

Ainsi, lors de la création d'un plug-in qui dépend de la session à ajouter à header.php, quel est le hook approprié pour ajouter session_start()?

4

Il n'y a pas de sortie régulière et donc pas d'en-tête envoyé avant template_redirect sur le front-end. Si vous avez également besoin de sessions sur le back-end, utilisez l'action wp_loaded pour couvrir les deux.

Exemple:

add_action( 'template_redirect', function() {

    $status = session_status();

    if ( PHP_SESSION_DISABLED === $status ) {
        // That's why you cannot rely on sessions!
        return;
    }

    if ( PHP_SESSION_NONE === $status ) {
        session_start();
    }

    $_SESSION[ 'foo' ] = 'bar';
});

N'oubliez pas que l'utilisation de sessions ajoute un ensemble de problèmes très complexes à votre code, y compris la sécurité, l'évolutivité (équilibreurs de charge) et les problèmes de prise en charge qui prennent du temps. Je ne le recommande pas.

3
fuxia

Voici une autre solution pour tout type de versions PHP que vous pouvez trouver à l'intérieur de CF Geo Plugin :

if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    if(function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_start(array(
          'cache_limiter' => 'private_no_expire',
          'read_and_close' => false,
       ));
    }
}
else if (version_compare(PHP_VERSION, '5.4.0') >= 0)
{
    if (function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_cache_limiter('private_no_expire');
        session_start();
    }
}
else
{
    if(session_id() == '') {
        if(version_compare(PHP_VERSION, '4.0.0') >= 0){
            session_cache_limiter('private_no_expire');
        }
        session_start();
    }
}

Avec cette solution, vous pouvez éviter tout problème de session et le démarrer à tout moment.

1