Cache-Control возиться с mysqli-> disabled_rows - PullRequest
1 голос
/ 20 декабря 2010

У меня есть одна веб-страница (назовем это 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 ]

2 голосов
/ 20 декабря 2010

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

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

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

0 голосов
/ 19 ноября 2011

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

0 голосов
/ 20 декабря 2010

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

...