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:
init
: La session ne commence paswp_head
: Accrochez-vous dans wp_head (); dans un pluginwp_loaded
: Obtenir les en-têtes ont déjà envoyé une erreur du pluginAinsi, 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()
?
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.
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.