Кеширование страниц браузером. Как отключить?

Тема в разделе "PHP", создана пользователем dandandan, 12 апр 2011.

Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Есть сайт - инет магазин. Прохожусь по страницам (кешируются браузером), затем добавляю товар в корзину. В блоке корзины показывается количество товара. Возвращаюсь к страницам, по которым уже прошелся и браузеры берут данные из кеша. Соответственно пользователи думают, что их товары потерялись.

    Сначала включил заголовки:
    PHP:
        // Date in the past 
        
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
        
    header("Expires: 0"); 
        
    // always modified 
        
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); 
        
    // HTTP/1.1 
        
    header("Cache-Control: no-store, no-cache, must-revalidate"); 
        
    header("Cache-Control: post-check=0, pre-check=0"false); 
        
    // HTTP/1.0 
        
    header("Pragma: no-cache");    
    Не помогло. При нажатии на F5 данные не обновлялись. Если же заходил на новую страницу, то появлялись адекватные данные. Алгоритм работы всех страниц - идентичный. Сайт - самопис.

    Далее добавил к заголовкам:
    PHP:
    header("HTTP/1.0 200 OK");            
    header("Status: 200 OK");    
    Страницы все равно кешируются, однако, если нажать F5 на клавиатуре, то браузер показывает адекватную страницу.

    Что еще можно добавить? Сайт на виртуальном хостинге.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.522
    Симпатии:
    1.375
    Гораздо проще и надежнее добавлять некий рендомный гет запрос - на стороне сервера обрабатывать его не обязательно, а для браузера это будет новой страничкой и кеширования не будет.
     
    dandandan нравится это.
  3. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Т.е. предлагаете в урд добавить доппараметр в виде рандомной строки? урл?rnd=blabla Так ?
     
  4. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    да, именно так - однако может не сработать если посетитель нажмет "назад" в браузере

    либо не кешировать саму корзину - это если движок магазина позволяет выборочно работать с кешем
     
    rex1963 и dandandan нравится это.
  5. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Запросы для поиска кол-ва товаров в корзине не кешируются. Кеширует именно браузер странички.

    Хорошо. Буду думать над случайной переменной, если никто больше других идей не предложит.
     
  6. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    случайно на ajax нет плагина history ? тк он у клиента сохраняет, и потом подгружает
    отрубить кеш даже если жмет назад можно только ajax.

    насчет рандомной переменной, верно, обычно так генерят скрипты, картинки и стили. но страницы тоже можно, но главное тут под АГС не попасть с переусердсоваванием.

    так же

     
  7. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    На ajax такого плагина нет. Была еще мысль делать аякс запрос, чтобы узнать колво товаров после загрузки страницы.

    Меня сегодня чуть не порвали с этим магазом :) Подействовало продвижение в поисковиках. В результате в корзине больше 100 товаров лежит. А заказано не более 10. Обычно каждый 4-5 товар оформляют на покупку. А потом примерно 10% от оформивших оплачивает.
     
  8. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    еще если на ломакальном серваке все ровно то может криво настроен nginx
    тут надо думать как с ним боротся или перезжать.
     
  9. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    на сколько знаю nginx вообще нет. По крайней мере год назад когда переезжал с mchost на hostgator , nginx у них не было. Говорили только, что на ВПС или ВДС можно самому поставить.
     
  10. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    PHP:
    if ( isset( $_SERVER['SERVER_PROTOCOL'] ) && strstr$_SERVER['SERVER_PROTCOL'], '/1.0' ) )
    {
        
    header'HTTP/1.0 200 OK' );
    }
    else
    {
        
    header'HTTP/1.1 200 OK' );
    }
    header'Expires: 0' );
    header'Cache-Control: no-cache, must-revalidate, max-age=0' );
    header'Pragma: no-cache' );
    не видел, чтобы вышеуказанный код где-то не работал :)
     
    dandandan нравится это.