Спасибо за все советы.Я решил проблему, добавив новый столбец (LastUnlockDate).Когда пользователь блокируется, я устанавливаю IsLockedOut на 1, LastLockoutDate на NOW () и LastUnlockDate на NOW () + $ lockoutduration (в секундах).
Тогда часть моего кода выглядит примерно так:
//------------------------------------------------------------
// if lockout session exits
//------------------------------------------------------------
if(!empty($_SESSION['count']))
{
require_once('./connections/mysql.php');
require_once('./web.config.php');
require_once('./controls/login/error_messages.php');
$count = $_SESSION['count'];
$offender = mysqli_real_escape_string($conn, $_SESSION['offender']);
$maxloginattempt = MAX_LOGIN_ATTEMPT;
if($count >= $maxloginattempt)
{
echo $maxloginattempt_error;
$showform = 0;
// check if user exists in database
$checkoffender = mysqli_query($conn, "SELECT UserName, IsLockedOut, LastLockoutDate, LastUnlockDate, NOW() AS ServerTime FROM users WHERE UserName = '$offender' LIMIT 1")
or die($dataaccess_error);
if(mysqli_num_rows($checkoffender) == 1)
{
$row = mysqli_fetch_array($checkoffender);
$islockedout = $row['IsLockedOut'];
$lastlockoutdate = $row['LastLockoutDate'];
$lastunlockdate = $row['LastUnlockDate'];
$servertime = $row['ServerTime'];
}
// unlock user if lockout has expired
if($islockedout == 1 && $lastunlockdate < $servertime)
{
$unlockoffender = mysqli_query($conn,"UPDATE users SET IsLockedOut = 0 WHERE UserName = '$offender'")
or die($updateactivity_error);
unset($_SESSION['count']);
unset($_SESSION['offender']);
$showform == 1;
}
// otherwise lockout the user
if($islockedout == 0)
{
$lockoutduration = (LOCKOUT_DURATION * 60);
$updateoffender = mysqli_query($conn,"UPDATE users SET IsLockedOut = 1, LastLockoutDate = NOW(), LastUnlockDate = (NOW() + $lockoutduration) WHERE UserName = '$offender'")
or die($updateactivity_error);
}
}
}
Поскольку этот код основан исключительно на присутствии сеанса, если браузер закрыт и сеанс потерян, пользователь вбаза данных все еще установлена как заблокированная.Итак, чтобы исправить это, я изменил свою фактическую страницу входа, которая теперь проверяет во время аутентификации и разблокирует пользователя, если срок блокировки уже истек.
Спасибо всем за помощь и предложение.В заключение, мой вопрос был , как я могу добавить время к дате - и простой ответ был : NOW () + $ lockoutduration .