私はこの問題をたくさん検索したと言いたいです。それを解決しようとして1週間以上経った後、私はほとんどそこにいると思います.
はい、私は session_start() を置きます - 私は session.auto_start をオンにしているので、これだけではありません!
一部の訪問者は、www を使用せずに私のサイトにアクセスし、他の訪問者は使用します。訪問中にドメインの変更が発生する可能性があるため (mydomain.com から www.mydomain.com へ、またはその逆)、$_SESSION データが失われ、多くのエラーが発生します。
だから私は私のコードにこれを追加します:
session_write_close(session_id());
ini_set('session.cookie_domain', '.mydomain.com');
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();
いくつかのテストの後、Chrome と Firefox で完全に動作するようになりました。ドメインを変更しても、セッション ID とデータは同じままです。しかし、驚くことではありませんが、IE では動作しません。
理論的には、PHP はブラウザーを動かしていないので、私には手がかりがありません。したがって、ユーザーエージェントが何であれ、それは機能するはずです。
IE では、セッションから別のセッションに変更されます。とても奇妙です。何が起こるかは次のとおりです。
- mydomain.com/info1 にアクセスすると、多くのデータが $_SESSION に読み込まれます。
- mydomain.com/info2 にアクセスすると、新しいデータに応じて $_SESSION が上書きされます。ここまでは、すべてが完璧です。
- しかし、ランダムに、IE でのみ、/info1 に関する情報が表示され、突然、/info2 に戻ることがあります。
フレームセットを使用しているので、これはphp.netからの重要なメモだと思います:
通常、セッション データは、session_write_close() を呼び出す必要なくスクリプトが終了した後に保存されますが、同時書き込みを防ぐためにセッション データがロックされているため、一度に 1 つのスクリプトしかセッションで操作できません。フレームセットをセッションと一緒に使用すると、このロックにより、フレームが 1 つずつ読み込まれます。セッション変数へのすべての変更が完了したらすぐにセッションを終了することで、すべてのフレームをロードするのに必要な時間を短縮できます。
フレームセットなしで新しいテストを行ったところ、IE を含むすべてのブラウザで動作しました。
セッションのphp構成は次のとおりです。
Directive Local Value Master Value
session.auto_start On On
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 240 240
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0