output_add_rewrite_varは、指定されたクエリ変数とその値をすべての出力URLに自動的に追加するために使用されるPHPの組み込み関数です。一般的な使用法は次のとおりです。
<?php
session_start();
output_add_rewrite_var('PHPSESSID', session_id());
?>
この関数は、ページの出力コンテンツ内のすべてのURLをスキャンし、パラメーターPHPSESSID = XXXXを自動的に追加します。
出力バッファーはオンになりません
output_add_rewrite_varは、 PHPの出力バッファリングメカニズムに依存します。出力バッファリングが有効になっていない場合、関数は交換用の出力コンテンツをキャプチャできません。
URL形式は標準化されていないか、問題のエンコード<br> ページのURLが標準のHTTPまたはHTTPS形式でない場合、または特殊文字がある場合、 output_Add_rewrite_varは正しく識別および処理されない場合があります。
動的に生成されたURLは、ページで使用されます
一部のURLは動的に生成されるか、後にJavaScriptを介してスプライスされ、 output_add_rewrite_varはサーバー側で処理されたときにこれらの変更を知覚できません。
HTTPヘッダー送信または出力割り込みが存在します<br> output_add_rewrite_varを呼び出す前にページが出力を送信した場合、関数が適切に置き換えられない場合があります。
コードで出力バッファリングが有効になっていることを確認し、適切な場所でoutput_add_rewrite_varを呼び出します。
<?php
ob_start();
session_start();
output_add_rewrite_var('PHPSESSID', session_id());
// ページコンテンツ出力
echo '<a href="http://gitbox.net/path/page.php">クリックしてアクセスします</a>';
ob_end_flush();
?>
これにより、関数が出力を正しくキャプチャし、パラメーターを追加することが保証されます。
output_add_rewrite_varが要件を満たすことができない場合、URLを生成するときにパラメーターを手動で追加できます。
<?php
session_start();
$sessionId = session_id();
echo '<a href="http://gitbox.net/path/page.php?PHPSESSID=' . urlencode($sessionId) . '">クリックしてアクセスします</a>';
?>
面倒ですが、これは最も直接的で効果的な方法です。
URLの書き換えがより複雑な状況では、サーバー構成を組み合わせて、Apacheの.htaccessルールなどのセッションIDの自動配信を実現できます。
RewriteEngine On
RewriteCond %{QUERY_STRING} !PHPSESSID=
RewriteRule ^(.*)$ $1?PHPSESSID=%{HTTP:Cookie} [QSA,L]
これにより、PHPレベルへの依存が減少します。
動的に生成されたリンクの場合、AJAXを介してセッション情報を生成またはパス中に手動でパラメーターを追加できます。
出力バッファがオンになっていることを確認して、 output_add_rewrite_varがページ出力を正しくキャプチャできることを確認してください。
URLには、特別な文字干渉関数の認識を回避するためのフォーマット仕様が必要です。
動的なURLの場合、サーバー側の自動アプリを依存しないようにし、フロントエンドまたはマニュアルスプライシングを使用してください。
サーバーの書き換えルールを組み合わせると、URLパラメーターの伝達の安定性が向上します。
この方法でのみ、 output_add_rewrite_varを使用する場合、URLを正しく書き換え、パラメーターを正常に渡し、ページ機能の異常を回避できるようにします。