проблемы с Post
Доброго времени суток.
Раздел не нашел... Решил написать сюда :) Проблема достаточно примитивная... Но облазил весь интернет, однозначного ответа не нашел. Суть проблемы: У меня есть форма, данные отправляются методом Post. (Action - эта же страница). Отправляем 1 раз данные, они нормально обрабатываются. Но если обновить страницу, то будут отправлены повторные данные... Раньше пользовался проверкой на нажатие кнопки: if (isset($but)){ .... } <input type='submit' name='but' value='Добавить' теперь вообще игнорируется эта строчка... может кто уже сталкивался с этой проблемой? |
Переменная $but будет всегда определена, данные-то те же отправляются.
Я в таких случаях выношу обработку post-запросов на отдельный урл, после чего серверным редиректом возвращаю обратно. Тогда обновление страницы не будет заново отправлять запрос. |
Цитата:
|
Дык там не будет перезагрузок, там будет редирект, можно и на этот же файл редиректнуть, главное, чтобы post в get превратился.
|
Kolyaj, а каким образом происходит подобное превращение? С примером, по возможности.
И ещё непонятка, возникающая после такого редиректа: если до header('Location: ...') были выставлены кукисы через setcookie(), то после редиректа соответствующие их значения не попадают в $_COOKIE (на denwer'ре такое происходит по крайней мере). |
Цитата:
Цитата:
|
>> А в чем непонятка? Браузер получает указание перейти на другой урл и переходит на него уже гетом.
Т.е. данные запроса целиком сохраняется что ли? И если браузер отсылал серверу POST-данные, то поучив от сервера выставленный заголовок редиректа он то же самое отправит GET-ом? >> А браузер не ИЕ случайно? FF3.0 как ни странно. В IE6.0 и Opera 9.61 всё замечательно. Моя версия такая: получив директиву перенаправления в заголовке, FF не передаёт установленные кукисы. Добавлено: через раз или пару раз работает. То возвращает на страницу авторизации, то нормально перенаправляет в место назначения. |
Цитата:
|
EugenyK,
Вы неправильно поняли. Запрос POST идет на страницу, которая выдает заголовок о смене location. Смена адреса повлечет GET запрос, который сделает ваш браузер, получив этот заголовок. С cookies совершенно непонятная проблема, никогда с таким не сталкивался. Браузер должен отправлять куки с каждым запросом, в том числе и при смене location. Посмотрите возвращает ли сервер HTTP статус "302", и адрес в location указан абсолютно или относительно? |
Андрей Параничев, спасибо, я понимаю, как это работает. Просто был удивлён, что вдруг у перенаправления через серверный header() есть какое-то особое свойство. Вариант перенаправлять на страницу, специально печатающуюся для показа результатов меня не устраивает, да вобщем-то в ней и не состоит задача.
А задача у меня состоит в том, чтобы не проверяя это на внешнем сервере, разобраться, почему FF на денвере через раз-другой подглючивает. Либо подглючивает денвер, получая запрос от FF. По поводу заголовков: На запрос POST /admin/?act=login HTTP/1.1, в котором передаётся строка login=admin&passwd=password, сервер возвращает 302, далее сообщение, что оба кукиса отправлены, потом Cach-Control: max-age=15 (это я в конфиге apach настраивал форсированное обнвление кэша каждые 15 сек), позже возвращает заголовок Location: http://site.test/admin/ (полный путь, собственно который я и прописывал). При этом ИНОГДА идёт следующая плеяда заголовков, а иногда она не идёт (т.е. браузер скушал заголовок Location и как бы "замолчал") Что интересно, иногда срабатывает переход на страницу (доступную только когда существуют нужные кукисы), хотя кукисы насильно удалены из браузера. Очень часто я нажимаю на ссылку http://site.test/admin/?act=logout, которая по сути очищает кукисы и выводит страницу приветствия, но при этом НИКАКИЕ заголовки не передаются и флажки на панели о том что нет CSS и JavaScript-ошибок отсутствуют (серые кружки) |
Часовой пояс GMT +3, время: 23:48. |