16

セッションが開始されたかどうかを確認し、開始されていない場合はロードするための短いコードトリックはありますか? 現在、チェックに関係なくセッションを開始すると、「セッションは既に開始されています...」というエラーが表示されます。

4

5 に答える 5

41

isset一般に、事前定義された変数が現在定義されているかどうかを確認する適切な方法です。

5.4より前のバージョンのphpを使用している場合は

通常は、以下のコードを実行するだけで問題を解決できますが、何らかの理由でセッションが無効になった場合でも、session_start()が呼び出され、$ _ SESSION配列がないため、エラーや不要なデバッグが発生する可能性があることに注意してください。作成することはできません。

if(!isset($_SESSION)){session_start();}

何らかの理由でセッションが無効になっていないかどうかを確認する必要がある場合は、エラーメッセージを抑制し、テストセッション変数を設定してから、それが設定されていることを確認できます。そうでない場合は、無効になっているセッションのリアクションをコーディングできます。スクリプトの開始時またはその近くで、これらすべてを実行する必要があります。例として(エラー処理設定によって動作が異なります):

if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
   //handle disabled sessions
}

ただし、phpバージョン5.4以降を使用している場合は

session_status()関数を使用できます。これは、無効になっているセッションを考慮し、セッションがすでに存在するかどうかをチェックするため、より適切なオプションです。

if (session_status() === PHP_SESSION_NONE){session_start();}

PHP_SESSION_NONEはPHPによって設定される定数であるため、引用符で囲む必要はありません。整数1と評価されますが、魔法数の必要性を排除するために特別に設定された定数として、定数に対してテストするのが最適です。

于 2012-04-10T17:15:26.670 に答える
8

多くの人@session_start()は、セッションがすでに開始されているという警告を単に抑制するために使用しています。代替手段は通常次のとおりです。

if (session_status() === PHP_SESSION_NONE) session_start();
于 2012-04-10T17:18:50.657 に答える
3

この条件を試してください

if (version_compare(phpversion(), '5.4.0', '<')) {
 if(session_id() == '') {
    session_start();
 } }else{
if (session_status() == PHP_SESSION_NONE) {
    session_start();
} }

エラーだけを回避したい場合は、関数の例の前に @ を使用します。

@session_start();
于 2016-06-29T22:36:03.327 に答える