0

私はいくつかのページにわたってセッション変数を使用しようとしています。しかし、変数は、設定されている元のページからサーバー上の別のページに移動すると消えます。変数が最初のページに設定されていることを確認しましたが、後のページで変数にアクセスしようとすると値がありません。 session_id()にアクセスすると、最初のページで設定したものとは異なります。IEがPHPセッション変数を渡していない

ここで私が何をしようとしています何の簡易版です: (セッション変数が設定されている最初のページ)

<?php 
ini_set("display_errors", "1"); 
error_reporting(E_ALL); 
session_start(); 
$_SESSION['id'] = session_id(); 
header('Location: pagetwo.php'); 
die(); 
?> 

(私はセッション変数にアクセスしようとする2ページ目)

<?php 
ini_set("display_errors", "1"); 
error_reporting(E_ALL); 
session_start(); 
echo "SESSION[id] = ".$_SESSION['id']."<br>"; 
?> 
は、

$_SESSION['id']白紙に戻り、私は述べ出力誤差があります。

を注意:未定義のインデックス:idは5行目のC:\ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ pagetwo.phpにあります。

ここでは少し奇妙なことがあります。これはすべてのブラウザで起こるわけではありません(IE8とFirefox 3のみ)。 Chrome 15とFirefox 7のセッション変数にアクセスできます。また、ApacheとPHPを実行する2つの異なるサーバーがあります。私がこれらの問題を抱えているサーバーはPHP 5.2.17を実行しますが、PHP 5.2.9を実行している他のサーバーでは、すべてのブラウザのすべてのページでセッション変数にアクセスできます。

PHP.iniファイルは2つのサーバーで異なると思われますが、それらのセッション設定は同じです。

誰かがIE8がPHP 5.2.17でセッション変数にアクセスできない似たような問題に遭遇したのかどうかはわかりませんが、過去2日間フォームを検索してこのようなものを見つけられませんでした。私はちょうど非常に単純なものを見逃していると思うし、誰かが私を正しい方向に向けることができると思っています。

+1

は、開発ツールを使用して、あなたはおそらく、セッションクッキーはIEに保存されていないことがわかります...セッションデータは、しかし、ブラウザ固有ではありませんセッションの前提はすべてクッキーに基づいています。また、例外を避けるためにisset()を使うべきです。 – Fosco

答えて

3

ユーザーをpagetwo.phpにリダイレクトする前にセッション変数を閉じていないと思われます。あなたのコードにIDの値を設定した後に、session_write_close()を追加することをお勧めします。これにより、変更がセッション変数に追加され、後のページで取得できるようになります。

<?php 
session_start(); 
$_SESSION['id'] = session_id(); 
session_write_close(); 
header('Location: pagetwo.php'); 
?> 

あなたはPHP.netの詳細についてsession_write_close()を読むことができ、あなたがコメントを貢献したユーザーまでスクロールした場合、あなたはこの非常に問題にJPという名前の人がコメントが表示されます。

乾杯!

4

Facebookのアプリケーションを開発する際に同じ問題が発生しました。IEはセッションCookieを送信しなかったため、すべてのページ要求が新しいものになりました。次のヘッダーは、私のためにそれを解決した:それは、サーバー側であるとして

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"'); 
関連する問題