2011-06-27 6 views
2

私は本当に奇妙な問題に直面しています。私はセッションベースの検索エンジンを持っています。PHP +セッションデータが失われています

不明な理由により、セッション変数は3ページ目の再読み込み後に失われます。

は、ここでPHPの設定です:

session.auto_start On Off 
session.bug_compat_42 On On 
session.bug_compat_warn On On 
session.cache_expire 180 180 
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 0 
session.hash_bits_per_character 5 4 
session.hash_function 1 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /var/lib/php5 /var/lib/php5 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On Off 
session.use_trans_sid 0 0 

あなたは、この問題をデバッグする方法任意のアイデアを持っていますか?

+0

session_unset('key1')$_SESSION['key1']を呼び出すと、すべてのデータ ソリューションを失っ存在しません。コードのレビューを検討しましたか? –

+2

私が考えることができる唯一の理由は、セッションを開始しなかったことです。セッション変数var_dumpまたはprint_rを使用して、それらが失われる場所を見てください。最近、私はこのようなことに直面していて、私はセッションを開始していないと確信しています。 –

+0

をphp.iniの設定とは別に、あなたのコードでセッションを開始したことを確認しなければなりません(例えば、PHPページの冒頭でsession_start()が実行されていると思います)。ページをリロードするときにhttpからhttpsにリダイレクトしていますか?これはセッションの損失の場合ですか? – hornetbzz

答えて

1

最初に、session lossの場合であるため、httpsへのリダイレクトがあるかどうかを確認します。

私はexit()を必ず持っています。リダイレクト後に

また、php.iniの* session.auto_start *を無効にし、コード内でセッションを開始し、そのセッションCookieを/ tmpディレクトリの/ var/lib/php5に配置しようとします。

次に、さまざまなコードポイントの$ _SESSIONデータを、簡略var dumpで調べます。

そして最後に、あなたは2つのファイルの研究combinining inotifyをを使用して、セッションファイルの変更を追跡することができます:あなたが側で両サイドをチェックすることができるsothat、セッションクッキーを見て1、およびPHPコード内に設置他のものを。 Debianのディストリビューションについては

、あなたは戦略的なポイント(複数可)でのPHPコード内のディレクトリ/クッキーに一時ファイルを作成すると仮定して、セッションクッキーは、あなたのTMPディレクトリにstroredさ:

# make sure the linux kernel > 2.6.13 and update it if not the case 
uname -a 
# install inotify 
aptitude install inotify-tools 
# run inotify in command line just before running your php code 
inotifywait -m -r --format '%f : %e' -e modify -e move -e create -e delete /tmp /cookie | while read line;do echo $(date '+%H:%M:%S') ;done; 
0

あなたの場合私はセッションが二回働けば、あなたの設定に問題がないことを言うだろう

if(isset($_SESSION['key1']){ 
    session_unset['key1']; 
} 
関連する問題