RSS
 

Drupal 7 кеширование гостевых страниц в Сафари

Недавно наткнулись на то, что Сафари неверно кеширует страницы на сайте для гостей. Проблема заключается в том, что если зайти на страницу сначала гостем. Потом залогинится на сайт, а после опять перейти на ту же страницу - то повтороного запроса на сервер не последует, и она полностью возьмется из кеша Сафари, что есть неправильно. В принципе Ф5 в такой ситуации помогает, но не све пользователи настолько умны.

Решением из коробки является только отключение кеша, что также есть совсем нехорошо.

Подробнее о проблеме можно почитать здесь: http://groups.drupal.org/node/191453

А решение мы придумали следующее: полностью отключить браузерное кеширования для Сафари с помощью хттп заголовков. На что-то более умное времени у нас не было, но и так все работало вполне неплохо, т.к. мы могли и дальше гостям отдавать полностью сгенерированные страницы из кеша Друпала.

Собственно само решение:

function mymodulename_init() {
  if (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari')!==FALSE) {
    $default_headers = array(
      'Expires' => 'Sun, 19 Nov 1978 05:00:00 GMT',
      'Last-Modified' => gmdate(DATE_RFC1123, REQUEST_TIME),
      'Cache-Control' => 'no-cache, must-revalidate, post-check=0, pre-check=0',
      'ETag' => '"' . REQUEST_TIME . '"',
    );
    foreach($default_headers AS $k => $v) {
      drupal_add_http_header($k, $v);
    }
  }
}

ЗЫ Заголовки взяты из самого Друпала, кажись bootstrap.inc