2012-03-23 14 views
0

私はこの有線のPHPセッションの問題を修正しています。session_start()が完全にランダムなタイムアウトになる

セットアップ:アウト完全にランダムな時間に 、のsession_start後の次のPHPの行()回:IIS V6.0上で実行されている、窓のVのためのPHP 5.2.6

問題。 は、私は、ファイル、エクストラネットサイトの各ページに含まれますauth.php(有効なログインを確認する)

auth.php 
session_start(); 
if (isset($_SESSION['auth']==1) { <---- timesout here 
     do something ... 
} 
... 

サイトを使用している場合、私はランダムに取得エラー「を30秒の最大実行時間を超えて」います2行目:(ISSET($ _ SESSION [ 'AUTH'] == 1){私はこのスクリプトを変更した場合

session_start(); 
echo 'testing'; <---- timesout here 
if (isset($_SESSION['auth']==1) { 
    do something ... 
} 
... 

ランダム誤差が今にも2行目に発生した場合(エコー'testing')、単純なエコーステートメント、奇妙です。

それは

この

は、ページのすべての種類に起こっている....のsession_start()ランダムに、問題を引き起こし、それが(でも、簡単なエコー文の)タイムアウトエラーをスローする権利後のコードの行を妨げているように見えます(db集約型、比較的静的な)サイト上では、トラブルシューティングが難しくなります。私は幸運なしでphp.iniのセッション変数とタイムアウトを微調整しています

誰かが似たようなことに遭遇したか、または見える場所を示唆することができましたか?

ありがとうございました!

+0

ウェブサイトを実行しているユーザは、 'session.save_path'ディレクトリに対する変更権限を持っていますか? – AndrewR

答えて

0

NTFSファイルシステムを使用している場合にセッションを終了するには、session_write_close()を使用してセッションを閉じる必要があります。セッションを開始するとセッションファイルがロックされるため、コードの実行中に他のファイルにアクセスすることはできません。何らかの理由で、Windows/NTFS上でロックが自動的に確実に自動的に解放されない場合があります。そのため、セッションが終了したら手動でセッションを閉じる必要があります。

+0

助けてくれてありがとう! – kkuni

+0

NTFSでこのような問題があったことを助けてくれてありがとうございました!私はフッタファイル(ほとんどのページに含まれています)にsession_write_close()を入れました。これまでのところタイムアウトエラーは見られませんでした。これがエラーの原因になっている可能性があります。 しかし、ロードするのに1秒を要するページがあり、フッターがロードされる前にユーザーがリンクをクリックすると、セッションエラーが発生する可能性があります。 これは私がsession_write_close()を呼び出さなければならないということですか?これらのタイプのエラーを最小限に抑えるために、各スクリプトの各セッションの終わりに(フッターから呼び出すのではなく)各スクリプトを読み書きしますか? – kkuni

+0

はい、あなたは正しいです。ページの上部ですべてのセッション作業を行い、ページを出力する前にセッションを閉じることができます。もう1つの方法は、[接続処理](http://php.net/manual/en/features.connection-handling.php)のドキュメントを参照することです。ユーザのアボートを無視するようにPHPを設定することができるので、スクリプトはまだ最後まで実行されます。 – AndrewR

関連する問題