Проблема с cookie
В общем в это прекрасное весеннее утро настроение мне испортила какая-то ошибка в скрипте PHP, исправление которой я никак не могу найти. Почему-то не посылаются в скрипте cookie!!! Причём причину я найти никак не могу.:confused:
Перекопал справочники, перечитал про setcookie(), ничего не нашел.
Скрипт предназначен для простого блокирования на определённое время пользователя, который 5 раз ввел неверно пароль при входе на сайт.
Если что, константа LOGIN_BLOCK равна 3-м.
Вот фрагмент кода PHP:
Код:
$msg='';
if ($crypted_pass !== $login_data['password'])
{
if (isset($HTTP_COOKIE_VARS['inp_pass_count']))
$inp_pass_count = $HTTP_COOKIE_VARS['inp_pass_count']-1;
else
$inp_pass_count = 4;
$msg = "Пароль введён неверно! Проверьте правильность ввода пароля! У вас есть ещё ".$inp_pass_count." попытки ввода.
В случае, если по истечении всех попыток вы так и не введёте правильно пароль, вы будете заблокированы
на ".LOGIN_BLOCK." минут, по окончании которых вы вновь будете иметь 5 попыток ввода пароля.
Данные меры предназначены для защиты от злоумышленников, стремящихся получить данные для входа в аккаунты других пользователей.";
if ($inp_pass_count > 0)
{
setcookie('inp_pass_count', $inp_pass_count, time()+(LOGIN_BLOCK*60));
setcookie('inp_pass_count_time_delay_start', time(), time()+(LOGIN_BLOCK*60));
$msg.="РАБОТАЕТ - ".$HTTP_COOKIE_VARS['inp_pass_count'];
}
if ($inp_pass_count <= 0)
{
$msg = "Извините, вы исчерпали свои попытки и так и не ввели правильный пароль!
Возможно это произошло из-за опечаток.<br>
Возможность попробовать ещё у вас появится через";
if (isset($HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']))
{
$delay = round(-((time()-((LOGIN_BLOCK*60)+$HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']))/60));
if ($delay == 0)
{
$delay = -(time()-((LOGIN_BLOCK*60)+$HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']));
$msg .= " $delay секунд.";
}
else
{
$msg .= " $delay минут.";
}
}
}
...
потом
echo $msg;
if ($crypted_pass !== $login_data['password'])
{
if (isset($HTTP_COOKIE_VARS['inp_pass_count']))
$inp_pass_count = $HTTP_COOKIE_VARS['inp_pass_count']-1;
else
$inp_pass_count = 4;
$msg = "Пароль введён неверно! Проверьте правильность ввода пароля! У вас есть ещё ".$inp_pass_count." попытки ввода.
В случае, если по истечении всех попыток вы так и не введёте правильно пароль, вы будете заблокированы
на ".LOGIN_BLOCK." минут, по окончании которых вы вновь будете иметь 5 попыток ввода пароля.
Данные меры предназначены для защиты от злоумышленников, стремящихся получить данные для входа в аккаунты других пользователей.";
if ($inp_pass_count > 0)
{
setcookie('inp_pass_count', $inp_pass_count, time()+(LOGIN_BLOCK*60));
setcookie('inp_pass_count_time_delay_start', time(), time()+(LOGIN_BLOCK*60));
$msg.="РАБОТАЕТ - ".$HTTP_COOKIE_VARS['inp_pass_count'];
}
if ($inp_pass_count <= 0)
{
$msg = "Извините, вы исчерпали свои попытки и так и не ввели правильный пароль!
Возможно это произошло из-за опечаток.<br>
Возможность попробовать ещё у вас появится через";
if (isset($HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']))
{
$delay = round(-((time()-((LOGIN_BLOCK*60)+$HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']))/60));
if ($delay == 0)
{
$delay = -(time()-((LOGIN_BLOCK*60)+$HTTP_COOKIE_VARS['inp_pass_count_time_delay_start']));
$msg .= " $delay секунд.";
}
else
{
$msg .= " $delay минут.";
}
}
}
...
потом
echo $msg;
строку $msg.="РАБОТАЕТ - ".$HTTP_COOKIE_VARS['inp_pass_count']; добавил специально, чтобы видеть, срабатывает или нет.
Поидее должно выдавать "РАБОТАЕТ - 3" (значение inp_pass_count),
но выдает "РАБОТАЕТ - "!!!
Я в шоке!!! Как такое может быть? Подскажите пожалуйста!
Может я чего-то не вижу??? Или не знаю?
Понять можно конечно всё, но почему один и тот же скрипт на одном хосте сервера работает с $HTTP_COOKIE_VARS а на другом хосте не работает!?
Лучше использовать ТОЛЬКО сокращенные версии: $_COOKIE, $_POST, $_FILES, $_GET
Про длинные версии лучше забыть - это устаревший вариант.
также как и $HTTP_POST_VAR на $_POST, $HTTP_GET_VARS на $_GET и т.д. и т.п.
длинные имена глобальных переменных в более поздних версиях пхп были изменены на более короткие по понятным причинам.
:)
В общем, я читал, что пхп с верссии 4.ххх примерно ввели новые короткие имена этим переменным, но просто думал почему на одном и том же Денвере на локалхосте в одном созданном хосте работает, а в другом нет :) Собственно с проблемой то я разобрался, да вот непонятно почему так сервер работает. Не может же он на разные (созданные уже мной) виртуальные хосты пускать разные правила исполнения скриптов (если конечно не использовать локальные настройки через .htaccess).