2012-02-11 9 views
1

上記のこと。意外にも、私はこれに明確な答えを見つけることができませんでした。PHPのsession_start()は等価ですか?

スクリプト内で2回以上呼び出すことが問題であるかどうかを知りたいだけです。 the manualを引用

+0

+1を私に新しい単語を教えるため。 http://en.wikipedia.org/wiki/Idempotence – vascowhite

+1

-1間違ったサイトを使って他の人に新しい言葉を教えるためです。また、質問をする前に簡単なテストを行ったり、ドキュメントのページを読んだりすることさえありません。 –

答えて

3

PHP 4.3.3の時点で、 以前に開始されたセッションがレベルE_NOTICEのエラーになります後session_start()を呼び出します。
また、2番目のセッションの開始は無視されます。

だから、それは多くを行うことはありません - 問題のいくつかの種類があることを示しており、通知を上げる以外;つまり、この関数を複数回呼び出さないでください。


編集@ hakreさんのコメントの後:は念のために、私は確信してエラーを行った後、二回のsession_start()を呼び出すコードの以下の部分でテストしてみたとの通知が報告されます:

<?php 
ini_set('display_errors', 'on'); 
error_reporting(E_ALL | E_STRICT); 

session_start(); 
session_start(); 

そして、私は次の注意得るか:

Notice: A session had already been started - ignoring session_start() in /.../temp.php on line 6 
+0

マニュアルはAFAIKの動作に関して正確には正しくありません。いくつかのバグ報告が利用可能でなければなりません。 – hakre

+0

@ hakre:それはどういう意味ですか?私は 'session_start()'を2回呼び出してテストしました。私は予期していた通知を受け取ります。 *(PHP 5.3.6でテスト済み)* –

+0

これはPHPのバージョンと戻り値で異なります。 – hakre

0

いいえ、session_start冪等されていないが、それは言語のランタイム状態に依存しています。

通常は2回以上呼び出すことができますが、いくつかの警告やエラーが発生することはありませんが、セッション状態や呼び出しの設定を変更しても機能は変わりません。

関数を呼び出すと、セッション状態が変更されるため、冪等の非常に厳密なビューでは完全にはありません。

さらに、$_SESSIONに対応するその機能の結果は、関連するストア、セッション名、およびセッションIDによって定義されたままであることに注意することが重要です。