2017-07-27 15 views
0

私はセッショントラッキングの形式をしようとしています。fwriteの前に実行されるコードが終了しました(PHP)

checkLogin.phpでは、ログインプロセスが正常に終了すると、小さなPHP配列がユーザー名とともにtxtファイルに書き込まれ、ユーザー名もセッション変数として保存されます。これは後でユーザが非アクティブであるかどうかを追跡するために使用されます。 Pythonスクリプトを使用して、ユーザーがアクティブでない場合、ユーザーの名前がアレイから削除されます。

他のWebページでは、Webアプリケーションにはtxtファイルが含まれ、セッション変数のユーザー名が配列内に残っているかどうかがチェックされ、そうでない場合はセッションが破棄され、 agn(ユーザーは非アクティブです)。

しかし、最初のログイン時に、アプリケーションがセッションユーザ名の配列をチェックすると、最初の1-2秒間は常に見つからず、その後に見つかるように変更されます。私はそれがアプリケーションが次のページに行くようにファイルがまだ書いているのでだと思う。次のページに行く前にアプリケーションが完了するのを待つようにする方法はありますか?

ログイン後、テキストファイル(USER.TXT)がこの

<?php activeUser= array("User1"); ?> 

"ユーザー1" のようになります。すべてので$ _SESSION [ 'CURRENT_USER']

として格納されています私がこれを持っているコードの先頭にある他のページ

include 'user.txt'; 

if(in_array($_SESSION['current_user'], $activeUser)) { 
    echo "Found"; 
    //User still active; 
} 
else { 
    echo "Not Found"; 
    //session_destroy(); 
    //header("Location:index.php?status=userInactive"); 
} 

ログインしてホームページにアクセスした直後コードの2番目のチャンクでは、 "Not Found"と表示されますが、リフレッシュ後に "Found"に変わります。

+1

トライは、配列とユーザーセッションvariable.Then彼らが異なっているし、さらにデバッグを行うかどうかを確認を印刷する –

+0

、テキストファイルには、アクティブなユーザーの配列から成り理論的には、ログイン後、ログインしているユーザー(セッション変数)がテキストファイルの配列に含まれているかどうかを確認し、Foundを返す必要がありますが、fwriteが完了する前にページが速くリダイレ​​クトされると思います。私はリダイレクトする前にfwrite仕上げをする方法を模索しています。 – KelvinGamer

+0

修正が見つかりましたが、効率的ではないと思います。 checkLogin.phpページのリダイレクトの前にsleep(3)を置いた。 fwriteのように完了するのに約2〜3秒かかります。どんな改善もまだ大いに評価されるでしょう! :) – KelvinGamer

答えて

0

あなたのコメントから推測したことは、あなたのコードが非同期になるようにしたいから、try catchブロックを使ってみてください。テキストファイルに書き込まれた配列は完璧に動作@IshanMahajan

 try { 
      // try your time taking process here 

     } catch(Exception $e) { 
      // throw your failed case here 
     }finally{ 
      // do the successfull case here 
     } 
+1

うまくいかなかった:(リダイレクトの前に睡眠の遅れを入れている唯一の方法だと思います。/最後に句はfwriteが実行前に終了するのを待たずに、とにかく試してくれてありがとう) – KelvinGamer

関連する問題