Drupal → Отключить кэш страниц для определённых ip адресов

04.01.2012

Основная сложность в том, что если аноним заходит на закэшированную страницу, то нет никакой возможности с помощью API повлиять на результат. Поэтому приходится делать проверку на самом раннем этапе бутстрапа — инициализации конфига.

Соответственно, чтобы отключить кэш страниц для определённых ip адресов, нужно в settings.php добавить:

if (in_array($_SERVER['REMOTE_ADDR'], array('1.2.3.4', '5.6.7.8', ...))) {
  $conf['cache'] = FALSE;
}
Написанное актуально для
Drupal 6
Похожие записи

Комментарии

Гость
10.04.2012, 03:56

До этого момента делал редирект для ie6 на javascript, т.к. не нашёл более или менее вменяемого способа обойти кэширование.
После прочтения статьи пришла идея: а что если на этапе инициализации конфига проверять браузер и редиректить, если ie6? Я в правильном направлении мыслю?

не совсем понятно что вы хотите сделать, но попробуйте

Гость
10.04.2012, 04:30

Попробую добавить конкретики :)

Дело всё в том, что когда добавляешь что-то вроде

$user_agent = $_SERVER['HTTP_USER_AGENT'];
if (stripos($user_agent, 'MSIE 6.0') !== false) {
header ("Location: /ie6.html");
}

в файл page.tpl.php, то нет никакой гарантии, что этот код не закэшируется. Я не нашёл способ отключить кэширование для этого кода, кроме использования block cache, с помощью которого можно отключить кэширование для конкретного блока и поместить в этот блок нужный нам код. Но ставить модуль для единственного редиректа не разумно, по-моему. С помощью API мне не удалось решить эту проблему тоже, быть может всё дело в плохом знакомстве с ним. Поэтому пришлось делать редирект для пользователей IE6 на javascript, но в этом случае мне жаль пользователей, которые отключают javascript в своих IE6 :)

А после прочтения данной статьи я подумал, что можно добавить проверку на IE в settings.php, ведь в таком случае мне удастся избежать кэширования.

Буду рад указанию на свои ошибки, я, по всей видимости, ещё многого не знаю )

Гость
10.04.2012, 04:45

И снова у меня идея: а не нужно ли мне поместить проверку браузера в hook_boot() ? :)

Гость
10.04.2012, 04:54

Сейчас посмотрел код модуля browscap - они собирают инфу о браузере в hook_init(), но этот хук ведь не используется для закешированных страниц! Я чего-то не понимаю, по всей видимости? Не нужно ли им использовать hook_boot?

Гость
10.04.2012, 05:24

Вы имеете ввиду, что я увлёкся оффтопом или что «если аноним заходит на закэшированную страницу, то нет никакой возможности с помощью API повлиять на результат»?

Если первое, то да, я признаю, можете не продолжать отвечать.
Если второе, то разве «Only use this hook if your code must run even for cached page views» не подразумевает, что мы можем изменить вывод даже закешированной страницы с помощью этого хука?

хук выполнится, но вывод изменить нельзя

Гость
10.04.2012, 05:48

Да, справедливое замечание.
Ну и буду очень признателен, если поделитесь соображениями по поводу лучшего способа определить браузер анонима при включеннном кэшировании.

Гость
12.06.2012, 21:40

После подключения стороннего скрипта в Drupal 7 через behavior (требуется перезагрузка DOMпосле изменения результатов поиска в форме стиль отображения которой регулируется сторонним javascript) наблюдается переполнение кэша и зависание браузера...
Как этого избежать?

Гость
13.06.2012, 11:51

Это значит, что браузер клиента просматривающего сайт с подключенным через behavior этим сторонним javascript начинает использовать неприлично много ресурсов ЦП и памяти, что вызывает впоследствии зависание браузера клиента при многократном изменении параметров формы поиска на views.
Проблема частично решилась принудительной чисткой кэша браузера клиента посредством подключения flushCache:
Drupal.attachBehaviors().flushCache();
Но, насколько я понимаю, это неправильно... Но что именно неправильно непойму...
Сам изначальный код подключеного js:

(function ($) {
  Drupal.behaviors.tb_neris = {
    attach: function (context, settings) { 	
	$('form#views-exposed-form-used-cars-page').jqTransform({imgPath:'/images/'});	
	$('.jqTransformSelectWrapper ul li a', context).bind('click', function() {
		Drupal.attachBehaviors();		
		});			
	}
  };
})(jQuery);

не понимаю, как это связано с темой поста

Гость
05.02.2015, 14:51

Очень, даже связано, у него есть скрип, при этом АПИ он определяет при помощи ПХП, потом передает это значение во внешнюю переменную JS. И так выходит что АИП для всех пользователей один и тоже. Впорос как кеш как передать значение АПИ внешнему скрипту JS?

Добавить комментарий