2017-06-04 15 views
1

私は小規模なイベントに登録する人々のためにウェブサイトを設定しました。PHPセッションがフレームリダイレクトを経由して転送されない

index.phpでsubmitを押すと、データを自分のDBに挿入する機能が起動し、それが機能するかどうかによって結果にセッション変数が設定されます。機能の

一部:このよう

$_SESSION['message'] = "That worked, thank you!"; 
header("location:thankyou.php") 
exit(); 

thankyou.phpに私はこのようにそれをエコーし​​ます:

<?php echo "<div id='content'><h1>".$_SESSION['message']."</h1></div>"; ?> 

すべてがローカルで動作します。

すべてが私のウェブスペースでホストされています。

これは学生協議会のイベントであるため、フレームリダイレクト(ブラウザのアドレスバーにドメインを保持する)をドメインに適用しました。この時点で、エントリを提出するとセッションが失われます。 thankyou.phpは空のままです。

var_dump()で$ _SESSIONをチェックしようとしましたが、完全に空です。

フレームのリダイレクトを維持しながら$ _SESSION配列を転送する方法に関するヒントは本当に感謝しています!

EDIT:session_start()は既にすべてのファイルにあります。

+0

thankyou.phpファイルに –

+0

を追加していただきありがとうございます。ご提案いただきありがとうございますが、session_start()は既にすべてのファイルにあります。そして、私はそれがローカルで、私のウェブスペース上で動作すると言いましたが、別のドメインからリダイレクトされたときは動作しません。 – Franz

+2

これはすべてのブラウザで失敗しますか? Safariは、iframeにクッキーを設定できないという奇妙な動作があります。また、要求をチェックして、Cookieの問題であるかどうかを確認する要求ごとに同じセッションIDが送信されているかどうかを確認することもできます。 – rypskar

答えて

2

iframeは新しいブラウザウィンドウと見なすことができますが、同じページ内に表示されるようになりました。あなたは言った:

フレームリダイレクト(自分のドメインをブラウザのアドレスバーに保持する)を自分のドメインに行った。

これは、ユーザーをちょっと騙そうとしていることを意味します。セッションが通常動作する方法は、PHPがセッションデータを取得するために使用するセッション識別子です。だから、次のいずれか

  1. セッションIDが(おそらく安全規制に)正しく渡されていない、あなたはより良いhttpリクエストを監視するために、ブラウザからsession_id()やデベロッパーツールを使用して、最初にこれを確認してください。 Location:ヘッダーを使用してもセッションIDが渡されない可能性があります。ブラウザ固有の場合もあります。
  2. メインウィンドウにセッションIDが設定されているため、セッションがiframeとメインウィンドウにどのように格納されているかには不一致があります。最初に確認するのは設定です。
+0

ブラウザ固有のようです。サファリだけが問題を表示します。わかりやすくするために、セッション魔法なしでindex.phpに出力しました。プロジェクトは小さすぎて、あまりにも多くの労力をかけることはできません。私はあなたの提案を調べました。その行動はサファリ特有であり、したがって容易に解決できないと思います。ありがとうございました! – Franz

関連する問題