it-swarm.com.de

Wie sollte ein session_start () angehängt werden, wenn ein Plugin erstellt wird?

Erfahren Sie mehr über Sitzungen, bei denen ich festgestellt habe, dass eine session_start() direkt nach dem <?php folgen soll pro Wo genau platziere ich eine SESSION_START? und ich wollte herumspielen und ein Plugin erstellen, das session_start() zu header.php hinzufügt, nachdem es <?php ist, aber nach der Suche habe ich versucht, das entsprechende Verfahren zu finden, um dies zu tun.

Ich habe nach session gesucht, aber ich habe eine Reihe von Fragen und Antworten gesehen, die meistens zu verwenden scheinen:

Wenn Sie also ein Plugin erstellen, das darauf beruht, dass eine Sitzung zu header.php hinzugefügt wird, welcher Hook eignet sich zum Hinzufügen von session_start()?

Es wird keine reguläre Ausgabe und daher kein Header vor template_redirect am Frontend gesendet. Wenn Sie Sitzungen auch im Back-End benötigen, verwenden Sie die Aktion wp_loaded, um beide abzudecken.

Beispiel:

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';
});

Beachten Sie, dass durch die Verwendung von Sitzungen ein ganzes eine Reihe sehr komplexer Probleme zu Ihrem Code hinzugefügt wird, einschließlich Sicherheit, Skalierbarkeit (Lastenausgleich) und zeitaufwendigen Supportproblemen. Ich empfehle es nicht.

3
fuxia

Hier ist auch eine andere Lösung für alle Arten von PHP Versionen, die Sie in CF Geo Plugin finden können:

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();
    }
}

Mit dieser Lösung können Sie Probleme mit der Sitzung vermeiden und sie jederzeit starten.