Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   проблемы с Post (https://javascript.ru/forum/xhtml-html-css/2068-problemy-s-post.html)

Phoenix 28.10.2008 10:50

проблемы с Post
 
Доброго времени суток.

Раздел не нашел... Решил написать сюда :)
Проблема достаточно примитивная... Но облазил весь интернет, однозначного ответа не нашел.

Суть проблемы:
У меня есть форма, данные отправляются методом Post. (Action - эта же страница). Отправляем 1 раз данные, они нормально обрабатываются. Но если обновить страницу, то будут отправлены повторные данные...
Раньше пользовался проверкой на нажатие кнопки:
if (isset($but)){
....
}

<input type='submit' name='but' value='Добавить'


теперь вообще игнорируется эта строчка...

может кто уже сталкивался с этой проблемой?

Kolyaj 28.10.2008 13:36

Переменная $but будет всегда определена, данные-то те же отправляются.

Я в таких случаях выношу обработку post-запросов на отдельный урл, после чего серверным редиректом возвращаю обратно. Тогда обновление страницы не будет заново отправлять запрос.

Phoenix 28.10.2008 17:33

Цитата:

Сообщение от Kolyaj (Сообщение 7688)
Переменная $but будет всегда определена, данные-то те же отправляются.

Я в таких случаях выношу обработку post-запросов на отдельный урл, после чего серверным редиректом возвращаю обратно. Тогда обновление страницы не будет заново отправлять запрос.

мне не удобно использовать отдельный URL. у меня движок пишется под телефон... и чем меньше перезагрузок тем лучше. да и скрипт уже написан под 1 файл..

Kolyaj 28.10.2008 17:34

Дык там не будет перезагрузок, там будет редирект, можно и на этот же файл редиректнуть, главное, чтобы post в get превратился.

EugenyK 30.10.2008 18:52

Kolyaj, а каким образом происходит подобное превращение? С примером, по возможности.

И ещё непонятка, возникающая после такого редиректа: если до header('Location: ...') были выставлены кукисы через setcookie(), то после редиректа соответствующие их значения не попадают в $_COOKIE (на denwer'ре такое происходит по крайней мере).

Kolyaj 30.10.2008 18:56

Цитата:

Сообщение от EugenyK
а каким образом происходит подобное превращение?

А в чем непонятка? Браузер получает указание перейти на другой урл и переходит на него уже гетом.

Цитата:

Сообщение от EugenyK
то после редиректа соответствующие их значения не попадают в $_COOKIE

Не знаю, честно говоря, не пробовал. Теоретически куки должны выставлятся. А браузер не ИЕ случайно?

EugenyK 30.10.2008 19:28

>> А в чем непонятка? Браузер получает указание перейти на другой урл и переходит на него уже гетом.

Т.е. данные запроса целиком сохраняется что ли?
И если браузер отсылал серверу POST-данные, то поучив от сервера выставленный заголовок редиректа он то же самое отправит GET-ом?

>> А браузер не ИЕ случайно?

FF3.0 как ни странно.
В IE6.0 и Opera 9.61 всё замечательно.

Моя версия такая: получив директиву перенаправления в заголовке, FF не передаёт установленные кукисы.

Добавлено: через раз или пару раз работает. То возвращает на страницу авторизации, то нормально перенаправляет в место назначения.

Kolyaj 30.10.2008 20:03

Цитата:

Сообщение от EugenyK
И если браузер отсылал серверу POST-данные, то поучив от сервера выставленный заголовок редиректа он то же самое отправит GET-ом?

Нужно обработать post-запрос, все сделать и выдать браузеру редирект на страницу, на которой просто показать результат работы.

Андрей Параничев 30.10.2008 23:26

EugenyK,
Вы неправильно поняли. Запрос POST идет на страницу, которая выдает заголовок о смене location. Смена адреса повлечет GET запрос, который сделает ваш браузер, получив этот заголовок.

С cookies совершенно непонятная проблема, никогда с таким не сталкивался. Браузер должен отправлять куки с каждым запросом, в том числе и при смене location. Посмотрите возвращает ли сервер HTTP статус "302", и адрес в location указан абсолютно или относительно?

EugenyK 31.10.2008 01:02

Андрей Параничев, спасибо, я понимаю, как это работает. Просто был удивлён, что вдруг у перенаправления через серверный 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, время: 08:42.