Cache-Control возиться с mysqli-> disabled_rows

У меня есть одна веб-страница (давайте назовем это A.html). A.html имеет некоторый javascript, который переключает страницу на динамическую php-страницу (назовем это B.php), используя простой document.location = "B.php". B.php запускает запрос mysql на основе файлов cookie, которые он видит, и возвращает результат на основе переменной mysqli-> disabled_rows. Однако каждый раз, когда страница переключается на mysqli-> disabled_rows, равна 0, хотя таблица mysql изменяется так, как и должна. Интересно, что когда я иду прямо в B.php, используя строку URL (или обновляю страницу), тогда mysqli-> disabled_rows равен 1, как и должно быть.

Глядя на wireshark, единственное различие между двумя запросами GET заключается в том, что второй (не javascript) имеет строку с Cache-Control: max-age = 0. Кто-нибудь знает, почему это повлияет на что-нибудь, и если есть способ, которым я могу это исправить?

РЕДАКТИРОВАТЬ: Вот код

    $req = $mysqli->prepare('update users set sts=NOW() where i=? and sid=? and sip=? and NOW()-sts <= '.$authentication_timeout.';');
    if ($mysqli->error) {
        log_mysql_error($mysqli);
        die('Unexpected error:'.$mysqli->error);
    }
    $req->bind_param('sss',$uid,$sid,$_SERVER['REMOTE_ADDR']);
    $req->execute();

    print $mysqli->affected_rows;
    $req->close();

3 ответа

Решение

Не было проблем с кешем вообще. Проблема возникает из-за того, что в данном конкретном случае одна и та же строка обновляется непосредственно перед выполнением этого кода, и не хватает времени для того, чтобы NOW() отличался. Таким образом, в то время как строка совпадает, данные не изменяются, поэтому $mysqli-> disabled_rows по-прежнему равен нулю. $mysqli->info показывает, что "Строки совпали: 1, Строки изменены: 0".

Если это действительно тайник скисания вашего варева, то я думаю, что делать

document.location="B.php?nocache=" + new Date().getTime();

решит проблему. Можете ли вы проверить и убедиться, что это все?

Вы не показываете никакого кода, поэтому я могу только догадываться, но affected_rows() вернет NULL при обновлении, которое ничего не меняет в таблице. Предположительно, если вы перезагрузите страницу, вторая загрузка покажет 0 даже если обновление прошло через страницу раньше.

Другие вопросы по тегам