2017-07-27 74 views
0

我正在嘗試執行一種會話跟蹤的形式。fwrite完成前運行的代碼(PHP)

在checkLogin.php,在登錄過程是成功後,會寫一個小PHP數組與用戶名的TXT文件,並在用戶名保存爲會話變量。稍後用於跟蹤用戶是否處於非活動狀態。通過Python腳本,如果用戶處於非活動狀態,用戶的姓名將從陣列中刪除。

在任何其他網頁中,Web應用程序將包含txt文件並檢查會話變量中的用戶名是否仍在陣列中,如果不是,則會破壞會話並提示用戶登錄agn(用戶一直不活動)。

然而,在第一次登錄,當應用程序檢查用於該會話的用戶名的陣列,它總是返回未找到用於第一1-2秒,並切換到後發現。我認爲這是因爲應用程序進入下一頁時該文件仍在寫入。有沒有辦法讓應用程序在進入下一頁之前等待fwrite完成?

登錄後,文本文件(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"); 
} 

剛剛登錄並進入主頁與第二塊代碼,它顯示「未找到」,但刷新後更改爲「找到」。

+1

嘗試打印陣列和用戶會話variable.Then看看他們是不同的,然後做進一步的調試 –

+0

@IshanMahajan寫入文本文件中的數組完美的作品,文本文件由活躍用戶的數組,所以在理論上,登錄後,它會檢查當前登錄的用戶(會話變量)是否在文本文件中的數組中,並且應該返回Found,但是我認爲在fwrite完成之前頁面被重定向得太快。我正在尋找一種在重定向之前完成fwrite的方法。 – KelvinGamer

+0

發現了一個修復程序,但我不認爲它是非常有效的。我在checkLogin.php頁面的重定向前放置了一個睡眠(3)。似乎fwrite需要大約2-3秒才能完成。任何改進仍將不勝感激! :) – KelvinGamer

回答

0

什麼我從您的評論推斷的是,你希望你的代碼是在異步使用try catch塊這樣嘗試。

 try { 
      // try your time taking process here 

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

沒有工作:(看來唯一的辦法是在重定向之前放置睡眠延遲:/,finally子句不會等待fwrite在運行之前完成,謝謝嘗試:) – KelvinGamer

相關問題