Столкнулся с проблемой кэширования в Drupal 7. Я использую модуль Admin Security
который при за ходе на страницу авторизации, запускает проверку текущего ip со списком ip который хранится в БД (белый список адресов). И если ip зашедшего на страницу авторизации отличается со списком адресов nо страница авторизации пользователю не показывается (возвращает 403). В php все просто запускается функция admin_security_init()
в которой происходят все проверки.
Почитав по просторам интернета понятно что хук init
запускается если страница не кэширована
. И правильно, запустив модуль и полный сброс кэша модуль какое-то время работает пока страница не закэшируется.
Сам модуль:
function admin_security_init() {
if (variable_get('admin_security_enabled', 0)) {
if (_admin_security_parseurl()) {
module_load_include('inc', 'admin_security', 'inc/admin_security_ip_check');
$current_ip = ip_address();
if ($current_ip != '127.0.0.1') {
$allowed = FALSE;
$allowed_ips = variable_get('admin_security_ips');
if (isset($allowed_ips) && is_array($allowed_ips)) {
$allowed = _admin_security_ip_is_allowed($current_ip, $allowed_ips);
}
elseif (class_exists('Database', FALSE)) {
$allowed = _admin_security_ip_is_allowed($current_ip);
}
// Deny access if an allowed IP address is not available.
if (!$allowed) {
watchdog('admin_security', 'An admin page request from IP @ip was blocked.', array('@ip' => $current_ip));
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
header('Content-Type: text/html;charset=utf-8');
echo "<p>Access denied! Доступ закрыт!</p>
<p>This page is available only by ip. Данная страница доступна только по ip</p>
<p>" . check_plain(ip_address()) . " has been banned from site administration. " . check_plain(ip_address()) . " был заблокирован администратором сайта. </p> ";
exit();
}
}
}
}
}
Что я делал:
Кто-то писал, что можно попробовать отключить кэш таким методо
function admin_security_boot(){
if( !empty( $_SESSION['cart_items'] ) ){
$GLOBALS['conf']['cache'] = false;
}
}
Не получилось. Через минут 10-15 модуль перестает работать
Установил модуль Cache exclusions
который исключает из кэширования нужные страницы. Опять не пошло.
Отключал в самом в друпале admin/config/development/performance
кэширование полностью.
Итог модуль какое-то время работает, потом перестает. Помогает полный сброс кэша. Можно конечно попробовать внедрить полный сброс кэша на все внутренние страницы, но это такой себе выход честно говоря. Наверное воспользуюсь им если уже ничего не поможет и никто не поможет:)
Не стоит утяжелять сайт таким модулем! в Drupal и прочих cms, любой модуль - это нагрузка на сервер. Все это решается проще и надежнее средствами самого сервера. Для апача пишем в .httacces
<Directory /user/login>
Order deny,allow
deny from all
# Список IP через пробел, с которых доступ разрешен
Allow from 192.168.2.2 192.168.2.3 //примеры ip
для nginx
location /user/login {
# блокируем все
deny all;
# кроме
allow 192.168.2.5 192.168.2.5;
}
путь /user/login - стандартный в drupal на страницу логина, точнее /?q=user
- пробуйте и этот путь.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Всем приветТак как я новичок в YII решил задать вопрос тут
Найдите ошибку в MySQL, UPDATE не происходит, но сообщение об ошибке не выводится