我正在嘗試執行一種會話跟蹤的形式。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");
}
剛剛登錄並進入主頁與第二塊代碼,它顯示「未找到」,但刷新後更改爲「找到」。
嘗試打印陣列和用戶會話variable.Then看看他們是不同的,然後做進一步的調試 –
@IshanMahajan寫入文本文件中的數組完美的作品,文本文件由活躍用戶的數組,所以在理論上,登錄後,它會檢查當前登錄的用戶(會話變量)是否在文本文件中的數組中,並且應該返回Found,但是我認爲在fwrite完成之前頁面被重定向得太快。我正在尋找一種在重定向之前完成fwrite的方法。 – KelvinGamer
發現了一個修復程序,但我不認爲它是非常有效的。我在checkLogin.php頁面的重定向前放置了一個睡眠(3)。似乎fwrite需要大約2-3秒才能完成。任何改進仍將不勝感激! :) – KelvinGamer