セッションについてもっと知るsession_start()
は<?php
のすぐ後ろに来るべきだと思いました。 正確にどこにSESSION_STARTを置きますか?header.php
の後に<?php
にsession_start()
を追加するプラグインを作成します。ただし、検索の後、これを行うための適切な手順を見つけようとしました。
session を検索しましたが、さまざまなQ&Aがよく見られます。
init
: セッションが開始されていませんwp_head
: wp_head()にフックします。プラグインでwp_loaded
: ヘッダの取得が既にプラグインからエラーになっていますそれで、header.phpに追加されるセッションに依存するプラグインをオーサリングするとき、session_start()
を追加するための適切なフックは何ですか?
通常の出力がないため、フロントエンドのtemplate_redirect
の前にヘッダーが送信されません。バックエンドでもセッションが必要な場合は、両方をカバーするためにアクションwp_loaded
を使用してください。
例:
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';
});
セッションを使用すると、セキュリティ、スケーラビリティ(ロードバランサ)、および時間のかかるサポートの問題など、コード全体に 一連の非常に複雑な問題 が追加されることに注意してください。お勧めしません。
これはあなたが内部で見つけることができるPHPバージョンのすべての種類のためのもう一つの解決策でもあります 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();
}
}
このソリューションを使用すると、セッションに関する問題を回避し、必要なときにいつでも開始できます。