0

私は以下のように動作する小さなウェブサイトを持っています

  1. ユーザーはログイン ページに移動し、資格情報を入力します (page1 と呼びます)。
  2. フォームは page2 に投稿され、ユーザーを認証し、session_start を呼び出し、セッション変数を設定$_SESSION['somevar']して page3 にリダイレクトします。
  3. $_SESSION['somevar']ページ3で、ユーザーをログインページに戻さない場合に設定されているかどうかを確認します

コード:

//here's the code on the top of the page3 
<?php
    session_start();
    if (!isset($_SESSION['somevar'])) 
    { 
        header("Location:http://somesite") 
    }
    ...other code follows

問題は、これが FireFox で機能している間、正しいユーザー資格情報を使用しても、IE 7 が page3 のコンテンツを表示する代わりに page1 にリダイレクトし続けることです。

これを解決するためのポインタを教えてください。

編集:非常に奇妙な解決策ですが、機能します。私が変更され

 if (!isset($_SESSION['somevar'])) { header("Location:http://somesite") }

 if ($_SESSION['somevar'] == '' ) { header("Location:http://somesite") }

そしてIEは今幸せです。しかし、なぜissetIEで動作しなかったのかはまだわかりません

どうもありがとう

4

4 に答える 4

0

iehttpheasers または wireshark を使用して、IE が Cookie を送り返しているかどうかを調べます。そうでないか、キャッシュすべきでないページをキャッシュしていることがわかると思います。

C.

于 2010-01-11T12:10:29.313 に答える
0

確かに、ヘッダーの直後に死ぬ必要があります。そうでない場合、以下のコードが実行され、すべてのクライアントがリダイレクト ヘッダーを実際にたどるわけではないため、セキュリティの問題が発生する可能性があります (たとえば、検索エンジンのスパイダーを参照)。

そのコンテンツを var_dumping するだけで、実際にセッションにあるものを確認できます。出力は header() の呼び出しの前にブラウザーに送信されるため、テスト中にリダイレクトは考慮されません。

<?php
  session_start();

  /* To test: */
  var_dump($_SESSION);

  if (!isset($_SESSION['somevar'])) 
  { 
      header("Location: http://somesite");
      die();
  }
于 2010-01-04T15:45:26.877 に答える
0
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

 header("Set-Cookie: SIDNAME=ronty; path=/; secure");

 header('Cache-Control: no-cache');

 header('Pragma: no-cache');

これをページの上部で使用して、IE7 を修正します

header('location: land_for_sale.php?phpSESSID='.session_id());

あなたの場所に使用?phpSESSID='.session_id()する:固定IE6に

于 2010-06-02T07:22:02.240 に答える
0

Your script needs to exit() or die() after calling the header function.

header() doesn't end the script. Some browsers will go ahead and move on to the new location, while others will wait while the rest of the script runs and display that output. Unless you call exit(), the script will run whether the output is shown or not.

于 2010-01-04T15:22:15.700 に答える