検索
ホームページphp教程php手册PHPセッションに関する警告

警告の全文は次のとおりです:

PHP 警告: 不明: スクリプトはセッションの副作用に依存している可能性があります

PHP 4.2.3 までは存在していましたが、セッション拡張は

であることに注意してください。

register_globals が有効でない限り、グローバル変数をデータのソースとして考慮しません。

session.bug_compat_42

を設定することで、この機能とこの警告を無効にできます。

、または session.bug_compat_warn を

の不明でそれぞれオフにします。

この問題については、インターネット上に多くの解決策がありますが、どれも不明瞭な答えを提供しています。では、本当の理由と解決方法は何でしょうか?

まずこれを覚えておいてください。PHP4.2 以降、register_globals はデフォルトで OFF に設定されています。

4.2.3 以降、以前のモードとの互換性を保つために、PHP は bug_compat_42 を導入しました。このオプションが有効になっている場合 (デフォルトで有効)、PHP は SESSION 内の変数を自動的にグローバル変数として使用できるようにします。オプションがオンになっている場合 次に、この機能の使用が報告されます。

コードの一部を見てみましょう、

session_start();

var_dump($_SESSION);

$name = 'ラルエンス';

$_SESSION['名前'] = null;

?>

上記のコードでは、bug_compat_42 がオンで register_globals がオフになっている場合、ページを 2 回リフレッシュする出力は次のようになります:

//初めて:

配列(0) {}

// 2 回目

配列(1) { ["a"]=> 文字列(8) "ラルエンス" }

2 回目に NULL にならないのはなぜですか? bug_compat_42 がオンになっていると、PHP は変数 a が $_SESSION['a'] への参照であると認識し、session_close のときに変数 a の値が書き戻されるからです。 >

このプロセス中に、bug_compat_warn がオンになっている場合、記事の冒頭の警告がスローされます

ということで〜

では、警告が発生する具体的な条件は何でしょうか? これらの条件を知れば、この警告を回避できます

PHPSRC/ext/session/session.c には、必要なすべての答えがあります:

static void php_session_save_current_state(TSRMLS_D) /* {{{ */

{

int ret = 失敗;

IF_SESSION_VARS() {

//セッション配列がある場合

if (PS(bug_compat) && !PG(register_globals)) {

ハッシュテーブル *ht = Z_ARRVAL_P(PS(http_session_vars));

HashPosition pos;

zval **val;

int do_warn = 0;

zend_hash_internal_pointer_reset_ex(ht, &pos);

while (zend_hash_get_current_data_ex(ht

、(void **) &val, &pos) != FAILURE) {

if (Z_TYPE_PP(val) == IS_NULL) { //変数はnullです

if (merge_global(ht, &pos TSRMLS_CC)) {//変数ライトバック

do_warn = 1;

}

}

zend_hash_move_forward_ex(ht, &pos);

}

if (do_warn && PS(bug_compat_warn)) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "あなたのスクリプトはおそらく

PHP 4.2.3 まで存在していたセッションの副作用に依存しています .....");

//以下の

は省略します

bug_compat_42 を有効にしない場合 (この機能は現在ほとんど使用されておらず、有効にすると混乱が生じる場合があります)、bug_compat_warn を起動しない場合、または register_globals が有効になっている場合、この警告は表示されないことがわかります。 .

さらに、bug_compat_42 を有効にすると、次の通知が発生する可能性があります..

PHP 通知: 不明: セッションのバグ互換性コードは、

を試行しません。

グローバル変数 $324324 は数値的な性質があるため、行 0

の Unknown にあります。

これは、$_SESSION で数値インデックスを使用するときに発生する可能性がある警告です。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール