これはおそらく、セッション データが Chrome のみで失われるのと同じ質問であり、 Google Chrome と URL 書き換えでのみセッション変数がランダムに失われることに関連しています。
私にとってうまくいく解決策はありません。誰かがこれに新しい情報を提供してくれることを望んでいました。
これらは私が従う手順です:
セッション(Cookieではない)を初期化し、
<?php session_start();?>
後で変数を同じphpファイルに設定します$_SESSION['nu'] = $userName;
次に、新しい php にリダイレクトし
window.location.href = "foo.php"
ます。その php ファイルはセッションを開始し (最初に、上記と同じ)、次に $_SESSION['nu'] を使用します。これまでのところ、すべてのブラウザですべて正常に動作します。Chrome (31.0.1650.26 beta) の 2 番目の php ページ (ステップ 2 のページ):
- AJAX 呼び出しを介してアクセスされる php ファイルで $_SESSION['nu'] を使用できます。
- ページをリロードすると、 $_SESSION['nu'] はもう設定されていません。最初のロード直後は設定されていません。
- $_SESSION['nu'] も必要とする別のページに移動しても、アクセスできません。
Safari (5.1.9 および 5.1.7) および Firefox (24.0 および 18.0) では、再読み込みして別のページに移動でき、$_SESSION['nu'] が設定され、すべて正常に動作します。
これを自宅環境 (MAMP 1.9.6) でテストすると、Chrome でも正常に動作します。
両方の php.ini ファイル (ホームとオンライン) で、session.use_only_cookies がオンになっています (ローカルとマスター)。
AJAX (ページの変更なし) 経由でアクセスできるため、新しいページに移動するときに Chrome のセッションに問題があるようです。しかし、なぜそれが最初に機能するのでしょうか? ページをめくります...
私は favicon.ico ソリューションを試しました (Web ルートに favicon.ico というアイコン ファイルを配置しました) が、何も変わりませんでした。
助言がありますか?ありがとう!
アップデート
- $_SESSION['nu'] にアクセスしようとするすべての php ファイルは、ルート (Web ホテルを使用しているため、'my' ルート) にあります。
- Chrome のコンソールの [Resources -> Cookies] を見ると、Cookie が常に存在していることがわかります (セッションを開始する php ファイルから foo.php に移動すると)。
- 私の頭を悩ませているのは、FFとSafariで動作することです...
Update2
コンソールからの画像。これは、foo.php (2 ページ目) にいるときに表示されるものです。
クロム:
サファリ:
解決策(うまくいけば): なぜ今それが機能しているのかわかりませんが、完全に快適ではありませんが、当分の間...何が起こったのかを説明するには、さらに詳細を説明する必要があります:
index.php は start_session() を呼び出します。変数 $_SESSION['nu'] = Null を設定します。次に、ページはログインボタンがクリックされるのを待ちます。
ログインボタンにはスクリプトがあり、AJAX 経由で singIn.php を呼び出し、start_session() を呼び出して $_SESSION['nu'] = "bar" を設定します。AJAX 呼び出しの done() 関数で、スクリプトは window.location.href = "foo.php" を呼び出します。
foo.php は session_start() を呼び出し、$_SESSION['nu'] を取得します。
なんでも試すモードで、index.php から start_session() を削除してテストしました。割り当て $_SESSION['nu'] = Null も削除しました。index.php にアクセスするとセッションがクリーンアップされ、事実上ユーザーがログアウトされるようにするために、それらを配置したかったのです。しかし、このサイトには適切なログアウト オプションがあるので、それを使い続けることができます。
index.php にこれらの行がなければ、Chrome で動作するようです。つまり、$_SESSION['nu'] の値は、ユーザーがサイト内の他のページをナビゲートしたり、foo.php をリロードしたりしても失われません。
先ほど言ったように、これは FF と Safari で常に機能していました。Chrome でも利用できるようになりました。誰かが説明を見つけることができれば幸いです!