1

私のサイト内では、ユーザーが表示しているページを追跡する変数$locationを使用しています。index.php の最後で、変数が$_SESSION配列にコピーされるため、次のリクエストでユーザーが前回どこにいたかがわかります (「戻る」リンクを生成するために使用します)。したがって、index.phpは大まかに次のようになります。

$location = GetLocation(); // $_POST と $_GET を処理してユーザーの位置情報を取得します
。 if(!isset($_SESSION['last_location'])) $_SESSION['last_location'] = SomeMeaningfulLocation();
.
.
OutputPage(); // $location に基づいてページをレンダリングします

.
$_SESSION['last_location'] = $location;

そのため、OutputPage() では、$_SESSION['last_location'] 変数を使用して「戻る」リンクを生成できます。問題は、このコードが MSIE、Chrome、および Safari で完全に機能することです。ただし、Firefox や SeaMonkey (私は Web 開発に使用するのが好きです) では動作しません。これらのブラウザでは、「戻る」リンクは常にフロントページを指しています。

役に立つかもしれないその他の事実:

  • セッションデータはファイルに保存され、サーバーの日付と時刻は正しく設定されます
  • 私はすでにキャッシュ設定(header('Cache-control: ...')など)で遊んでみましたが、違いはありません
  • Firefox/Seamonkey構成でnetwork.prefetch-nextを無効にしようとしました (違いはありません)
  • このSomeMeaningfulLocation()関数はフロントページの場所を返しません。そのため、リクエストごとにセッションが「忘れられ」、再初期化される可能性を排除するため、これもまた除外されます...
  • ... 他のセッション変数は正常に機能します (ただし、これは、リクエストごとにコンテンツが自動的に更新されるという点で異なります)。
  • apacheのアクセスログやエラーログに異常は見られません(他のブラウザでも同様です)
  • $_SESSION['last_location'] 割り当て直後 ( index.phpの最後) の値を確認すると、正しい値が返されます。index.phpの最初で確認すると、すでにフロントページの場所で上書きされています (繰り返します: Mozilla でのみ。他のブラウザーでは、これらのチェックは正しい期待値を示します!)

前もって感謝します、私はアイデアがありません:-)

4

0 に答える 0