За месяц Июнь, 2011

Кэшированный редирект или постоянно перебрасывает страница

Столкнулся с такой ситуацией. Страница (назовем её страница А) перенаправляет пользователя на форму входа-регистрации (Страница Б), если он не определяется как пользователь. Пользователь входит/регистрируется и при повторном переходе к Странице А вновь перенаправляется на Страницу Б.

В общем, сервер упорно не хочет заново проверять условие “пользователь вошел” (т.к. подглядывая в переменные сессии на соседних страницах - на той же форме регистраци - можно увидеть, что пользователь определяется корректно).

Оказалось, дело в том, что сервер перед редиректом устанавливает кэширующие заголовки (видимо, в погоне за уменьшением нагрузки на сервер и, соответственно, увеличением скорости работы), которые “намекают” браузеру, что ответ надо бы сохранить (в данном случае на 2 часа). И тут же передается редирект с кодом ответа 301 или 302, который и попадает в кэш. При повторном обращении запрос к серверу (именно там производится проверка, вошел пользователь или нет) вообще не производится, а результат, полученный из кэша повторно перенаправляет на страницу Б. Помогла повторная отправка аналогичных заголовков, указывающих на то, что страницу кэшировать не нужно.

header(”Expires: Mon, 3 Apr 2000 07:00:00 GMT”);
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");

Вот такой вот “кэшированный редирект”.

Опубликовано Июнь 29, 2011 | автор: levik  |  Нет комментариев »

Denwer, kaspersky и hosts - история одного фейла

Дано: Запускается denwer, однако… ни один хост кроме localhost недоступен.

Дополнительно: на компьютере установлен Kaspersky Internet Security 11

При этом файл hosts при запуске денвера тупо не изменяется. Однако никаких сообщений о запрете на запись нет. Поиски по сочетаниям kaspersky, Denwer, hosts сводятся к тому, чтобы добавить все исполняемые файлы  Denwer в доверенные, изменить разрешения файла.. включить DNS-клиент. Всё это вроде “нормально”…

Спустя некоторое время заметил, что файл hosts после запуска денвера возвращается в исходное состояние с датой изменения 18.08.2003.. однако при открытии в текстовом редакторе - отображается файл с хостами измененный только что. Ощущение идиота во мне усиливается )))

Отключаю Касперского.. повторяю манипуляцию с файлом - тоже самое.. Копирую файл 2003 года в другое место - копируется “новый” последний файл.. Сохраняю обратно - размер возвращается… Касперский отключен :)

Туплю… Долго туплю…

Повторяю ещё раз (ещё много-много раз) с самого начала -  туплю… Ухожу в форумы… читаю про наследование ограничений программ у Касперского (если программа запущена из другой программы, то она наследует её ограничения, если не указано другое).. вспоминаю, что касперский отключен… И ловлю себя на мысли, что запускаю всё это дело из Total Commander…

Редактирую hosts из проводника в блокноте - сохраняю… работает… Домысливаю, что версия Total - Portable (видимо, отслеживает изменения системных файлов.. и сохраняет их к себе.. редактор, который показывал “нужный” файл естественно запускался из Total )))

Вроде всё на местах - hosts изменен, DNS-клиент включен.. ан нет - нужные хосты не пингуются..

Оказывается, для VPN-подключения (компьютер использовался) был отключен lmhosts (галочка в свойствах сетевого подключения - TCP/IP - вкладка Wins) - ставим галочку, выбираем файл (?) - работает!

ps.

Опубликовано Июнь 22, 2011 | автор: levik  |  Нет комментариев »

PHP - как удалить переменную из $_GET - редирект со склейкой

В продолжение статьи про “лишние” $_GET переменные выкладываю практическую часть - скрипт (сниппет-кусок готового кода) для редиректа на аналогичные страницы, но без лишних $_GET переменных. Т.е. склейка страниц c $_GET переменными и “основных” страниц, без них (или удаление $_GET переменных из URI)

if (!empty($_GET)) {
	$tounset = array('vmcchk','flypage');
	foreach ($tounset as $v)
		unset ($_GET[$v]);
	// new URI
	$request = substr($_SERVER['REQUEST_URI'],0,strpos($_SERVER['REQUEST_URI'],'?'));
	$qs = ''; // NEW query string
	if (!empty ($_GET)) {
		$qs = array();
		foreach ($_GET as $k=>$v) {
			$qs[] = '$k='.urlencode($v);
		}
		$qs = implode ('&',$qs);
		$qs = '?'.$qs;
	}
	header("HTTP/1.1 301 Moved Permanently");
	header ('Location:'.$request.$qs);
	exit();
}

Опубликовано Июнь 13, 2011 | автор: levik  |  Нет комментариев »

vmcchk=1 - Virtuemart добавляет в конце URL vmcchk

В очередной раз порадовал Virtuemart - интернет магазин на Joomla. В этот раз красивые SEO-адреса были подпорчены непонятной припиской vmcchk=1 . Как и предпологалось из названия - это дело “рук” vm - virtuemart

Добавление этой переменной связано с проверкой Cookie у web-клиента (браузера т.е.). Чтобы убрать злостный vmcchk в конце УРЛ-ов следует подредактировать файл /classes/ps_session.php около 63 строки - проще всего закомментировать (в начале строки добавить // - двойной слэш)

if( @$_REQUEST['option'] == 'com_virtuemart' && USE_AS_CATALOGUE == '' ) {
$this->doCookieCheck(); // Introduced to check if the user-agent accepts cookies
}

Кроме того, не помешает для склейки страниц-дублей сделать 301 редирект на страницу без vmcchk

ps Что самое интересное, на форуме разработчиков склоняются к тому, чтобы убрать эту проверку, однако vmcchk до сих пор присутствует в URL-ах )))

Опубликовано Июнь 10, 2011 | автор: levik  |  Комментарий (1) »

Windows - как сменить IP из командной строки, утилиты для изменения сетевых настроек

Иногда при переходе от одного сетевого кабеля к другому (ноутбук с “проводным” подключением), часто бывает так, что требуется определенная настройка IP адреса - если DHCP  не включен (иногда так задумано некоторыми админами или провайдерами). Естественно, постоянное изменение параметров подключения может порядком надоесть, и появляется желание автоматически, одним кликом изменять IP адрес (а также другие параметры сетевого подключения) Как сменить IP адрес из командной строки - продолжение.

Опубликовано Июнь 2, 2011 | автор: levik  |  Нет комментариев »