PHPセッションがリクエストの途中でタイムアウトした場合、$ _ SESSION配列はどうなりますか?
-
05-07-2019 - |
質問
スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
session_start();
if(! isset(スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
session_start();
if(isset(スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
session_start();
if(! isset(スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
<*>
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
<*>
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name']; // will this line throw an error?
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name'])) {
$name = スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
session_start();
if(! isset(スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
<*>
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
<*>
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name']; // will this line throw an error?
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name'];
} else {
echo 'Name is not set';
exit;
}
// bunch of code here
echo 'Name is ', $name;
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', スクリプトの実行中にPHPセッションがタイムアウトした場合、$ _ SESSION配列の内容はスクリプトの実行が終了するまで引き続き利用可能かといつも思っていました。例:
<*>
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>SESSION['name']; // will this line throw an error?
セッション変数をローカルスコープにコピーして、後でセッションタイムアウトをチェックしなくてもスクリプトでそれらを読み取れるようにするのは実用的ですか?次のようなもの:
<*>解決
そのようなことを心配しないでください。セッションには何も起こりません。 sessioni_start()
によって初期化され、 $ _ SESSION
はスクリプト内で常に利用可能になります。
他のヒント
デフォルトの3時間のセッション有効期間は、セッションを開くたびにリセットされます( session_cache_expire
)、リクエストの途中でセッションがタイムアウトする唯一の方法は、リクエストの処理に3時間かかる場合です。デフォルトでは、PHPリクエストはわずか30秒後にタイムアウトするため、リクエスト中にセッションが期限切れになる危険性はありません。さらに、 $ _ SESSION
変数はリクエストの途中で突然変更されることはありません。セッションの開始時に設定され、それだけです。
変数は最初の要求で$ _SESSIONグローバルにコピーされるため、ローカル変数にコピーするのと同じ効果があります。
ただし、わかりやすくするために、ローカル変数にコピーすることは理にかなっています。特に、変数を数回使用する予定がある場合。 $ _SESSION ['variable']が至る所にあるコードを読むのは難しい場合があります。
理解する必要があるのは、セッションの仕組みです。 $ _SESSIONスーパーグローバルを使用してスクリプトにアクセスするクライアントは、それらに属するセッションのキー(Cookie / URLに格納されている)のみを知っています。つまり、セッションデータ自体はクライアントとは関係ありません。使用するセッションデータのキーがあれば、それを使用できます。古いバージョンのPHPには、アクセスしやすい場所にセッションが保存されていたため、セキュリティホールがいくつかありました(詳細は覚えていません)。
基本的に、PHPスクリプトにセッションIDがある場合、マシンのメモリがフラッシュされている/ハードドライブが破損していない限り(つまり、コンピューターの再起動/デバイス障害)、そのセッションにアクセスできます。
これが役立つことを期待します。そうでない場合は、php.netにアクセスして、セッションの仕組みの詳細を確認します。