web-dev-qa-db-ja.com

PHPセッションはIE

サイト全体でサーバーサイドセッションを使用するphpで作成されたサイトがあります。
実際、これはセッション変数に依存するユーザーログインのあるサイトであり、allセッション変数に問題があった場合、ページはまったく読み込まれません。

このサイトには、他のユーザーからの小さなメッセージのフィードを保持するiframeがあります。
これらの小さなメッセージの横には、ユーザーのプロファイルを開くクリック可能な写真があります。
現在、各ページは、その特定のページでユーザーのプロファイルを開くためにいくつかのフォーマットを必要とします...実際にはほんの数ページしかありません問題ページですが、それらのページはonclick関数をフォーマットする必要があります少し違うか、ページを壊します。
そこで、各ページにセッション変数を設定しました($_SESSION["current_page"])クリック可能な写真のフォーマット方法をフィードに知らせます。これで、Firefox、Opera、Chrome、Safariはすべて想定どおりに機能します。
しかし、IE6とIE7では、特別なフォーマットが必要なページで問題が発生しています。
それで、少し髪を抜いた後、私は最終的にサーバーからセッション変数を印刷することに取り掛かりました。
そして、見よ、特別なページで、($_SESSION["current_page"])は常に「special1」や「special2」ではなく「main」に設定されます。

Firefoxと私が言及した他のすべてのブラウザで同じセッション変数を出力しましたが、それらは想定どおりに「special1」または「special2」を出力します。
誰かが何かを考えることができますか?おそらくフィードがiframeにあるという事実に関連していますか? -それにより、IEはサーバー側のセッション変数を異なる方法で処理するのでしょうか、それともどういうわけかバックグラウンドでページ「メイン」をサイレントに起動するのでしょうか?
ページ「メイン」への参照がないかフィードを注意深くチェックしました。そのページをロードする方法がないようです。

これは私には意味がありません。

14
seans

この問題の解決策が面白いと思う人もいるかもしれません。フィドラーは確かにここで助けました。 Fiddlerのおかげで、実際にはページmain.phpにアクセスしていることがわかりました(したがって、ターゲットページに設定した直後にセッション変数を設定しました)が、サーバーはのルートで302を取得した後、デフォルトでそこにありました。サイト。これはすべてバックグラウンドでサイレントに行われ、before my onload = "" javascriptが実行されました。

だから私は何かonそれらのページがエラーを引き起こしていると確信していましたが、壊滅的なものではありませんでした。

ここにあります: <img src= "" >

IEは、空白のsrc属性に夢中になり、サーバールートにアクセスし、デフォルトでページメインになりました。私はここで起こっているメカニズムを完全には理解していません。また、これがIEの動作になっている(結局のところ、不正な形式のimgタグです))かどうかもわかりません。これはバグですか?

3
seans

サーバーマシンの名前を確認してください。 IE '-'または '_'を含むマシン名に問題があります-セッションを維持できません!過去にこの問題が2回発生しましたが、理解するのに常に数週間かかりますアウト、そして私はショックを受けましたIEはそれを修正していません。

奇妙な文字がないようにマシンの名前を変更するだけです! URLでサーバーのIPアドレスを使用してテストすれば、機能させることができます。

31
Kieveli

IEにはiFrameの処理に関するCookieの問題があり、これがセッションの問題を引き起こしている可能性があります。これらのリンクをご覧ください。

http://adamyoung.net/IE-Blocking-iFrame-Cookies

http://gathadams.com/2007/06/25/how-to-set-third-party-cookies-with-iframe-facebook-applications/

http://nileshtrivedi.in/blog/2008/09/01/iframe-cookies-and-internet-Explorer/

10
Sijin

ある種の監視プロキシ(私は Fiddler を使用)を使用してページをテストし、ブラウザーが要求するページを確認してください。それはあなたに何が起こっているかについてのいくつかの手がかりを与えるかもしれません。

また、さまざまなブラウザからリクエスト/レスポンスをキャプチャして、IEの動作が異なることを確認してください(リクエストの順序、リクエストの内容?)。

問題を特定するために、SESSIONを使用してコードを書き直すことができますかwithout(他の回答の1つに記載されています)?たぶんIEは他のブラウザとは異なる順序でページにアクセスしていますか?たぶんそれはメインページを複数回要求しています。つまり、セッション変数は「メイン」に設定されていますか?セッション変数なしで、ページはお互いの状態に影響を与えません。

9
Piskvor

ほとんどの場合、ファイルの先頭にあるこのphp行で十分です。

header('P3P: CP=”NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM”');

そうでない場合は、IE7の場合は次のことも試してください。

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');

それがIE6で機能しない場合は、セッションIDにGETパラメーターを使用できます。

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

ドキュメントの先頭にheader('P3P: CP="CAO PSA OUR"');を追加した場合に見つかりました。問題は解決したようです。

2
David Stone

私はこの問題を抱えていました、そしてそれは私の開発ボックスの日付が出ていたためでした。 Firefoxは気にしませんでした、IEおよびchromeは、セッションが設定されるとすぐに期限切れであると見なしていました。

1
seb

私は同じ問題を抱えています、そしてそれは今解決されました。

IMGタグの空白または空の属性の値が問題の原因です。私の場合、JavaScriptを使用してIMGオブジェクトのソースを空の値に変更しました。それを行うことも問題を引き起こす可能性があります。

1
encanodon

私が正しく理解していれば、セッション変数を使用して、ページからそのページのiframe内のページにデータを渡そうとしていますか?これはうまくいく方法ではないようです-GET変数をiframeURLに渡してみませんか?つまり?current_page = special1。セッションの状態に依存しないため、これはより信頼性が高いと思います。

また、セッション変数は、ユーザーのPCで開いている同じサイトの複数のページ(複数のタブなど)で同じであり、奇妙な動作を引き起こす可能性があることにも注意してください。

0
Tom Haigh

セッションデータは、クライアントではなくサーバー側に保存されます。この値が設定される他のページを確認します。

0
Powerlord

多分それはsession.cookie_lifetime。私は同じ問題に直面しました。更新しましたsession.cookie_lifetime: 4500からsession.cookie_lifetime:0。これは、ブラウザがシャットダウンするまでセッションCookieが期限切れにならないことを意味します。

0
dotcolor