Как спрятать POST?

Phristen

Новичок
Как спрятать POST?

Задача такая: доставить данные через POST, но чтобы при перегрузке страницы браузер не спрашивал, хотите ли вы переслать POST-данные заново. Без html и javascript редиректов (только 301).

Делаю так:
PHP:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
	$_SESSION["POST"] = $_POST;
	header ("Location: ".$_SERVER["REQUEST_URI"]);
	exit;
} else if (count($_SESSION["POST"]) > 0) $_POST = $_SESSION["POST"];
unset($_SESSION["POST"]);

Интересуюсь вот чем.
Может ли так получиться, что два одновременно отправленных пост запроса от одного юзера перепишут $_SESSION["POST"] до того, как случится редирект? Т.е. оба скрипта получат одни и те-же данные, фактически, хотя должны были получить разные.

Ну и вообще, есть ли другие способы? Может быть данные добавлять в $_SESSION["POST_$random_id"], а в другом массиве сделать нечто вроде индекса, чтобы знать какой id относится к какому скрипту?

Извиняюсь если бред пишу :)
 

Фанат

oncle terrible
Команда форума
вот и делай 301
это по поводу того, как "спратать ПОСТ".

а про сессии тебе можно будет ответиь только после того, как ты объяснишь - зачем они тебе здесь
 

Phristen

Новичок
это по поводу того, как "спратать ПОСТ".
Разве я написал с ошибкой?

а про сессии тебе можно будет ответиь только после того, как ты объяснишь - зачем они тебе здесь
Ну как-же? После редиректа с помощью header("Location: ..."), переменная $_POST будет пустой.
Куда её временно поместить, как не в сессию? Можно в файл конечно, но есть ли смысл?
 

Фанат

oncle terrible
Команда форума
яркий пример ответа, который ни на что не отвечает.
я не спрашивал, КУДА ПОМЕСТИТЬ. Я спрашивал ЗАЧЕМ ТЫ ЭТО ДЕЛАЕШЬ.
попробуй собраться с мыслями и ответить ещё раз.
 

Phristen

Новичок
яркий пример ответа, который ни на что не отвечает.
Мистика какая-то.
Вопрос был - зачем мне в данной ситуации сессии. Я на него ответил. Затем, что я не вижу другой альтернативы.

Затем, что если не использовать сессии (или другой механизм, с помощью которого POST можно кудато временно ПОМЕСТИТЬ), то те данные, что содержались в нём (в ПОСТе) до редиректа, будут утрачены. А мне они нужны в целости и сохранности.

P.S.
я не спрашивал, КУДА ПОМЕСТИТЬ.
А я и не отвечал. Я как раз спрашивал.
Если сессии здесь не годятся, то что годится?
 

Фанат

oncle terrible
Команда форума
для чего тебе нужны данные?
В принципе, бываеют такие случаи, когда данные нужны, но гораздо реже, чем случаи, когда челочек не совсем опнимает, что делает.

Вопроса твоего я тоже не понял.
Вроде бы, про способ редиректа ты и сам знаешь.В чем вопрос-то был?
 

Phristen

Новичок
Вопрос был в первом посте, WP на него ответил.

Мне нужно сделать так, чтобы браузер не спрашивал про пересылку POST-data при рефреше страницы (или при back/forward-е на страницу), на которую была отправлена форма методом POST.

На форуме, например, при создании нового поста сначала кидает на страницу "ваше сообщение добавлено, сейчас мы вас переместим в тему", а мне бы хотелось без промежуточных остановок.

В это-же время, после всех махинаций массив POST должен быть доступен скрипту для обработки. Зачем? Ну например для того, чтобы в случае неправильного заполнения формы ее можно было снова отобразить с уже введёнными полями. И много еще для чего...
Вот и всё. Единственный спозоб реализации, который я придумал - это редирект с помошью хедера.
 

Фанат

oncle terrible
Команда форума
гыыыы! который я придумал - это 5! Нет, это 10!
Если однажды иностранный турист встретит в Москве нервного лысоватого парня, который станет утверждать, что он изобретатель холодильника, не надо считать его сумасшедшим: вполне возможно, он на самом деле изобрел холодильник, много лет спустя после того, как он стал повседневностью на Западе.(...)
Г.Г.Маркес, Впечатления от поездки по СССР, 1957 год
Этот способ придумывать не надо. Он и так единственный. И повсеместно используемый. вне зависимости от фантазий, посещающих твою голову.
Ну например для того, чтобы в случае неправильного заполнения формы
В принципе, это похвально. Большинство разработчиков - и я в том числе - ленятся делать обработку на сессиях, а выводят ошибку без редиректа. но правильнее - с сессиями.
Но мне не нравится это твоё "Ну например..."
Не люблю, когда вопросы высасываются из пальца. Вопрос должен отражать насущную необходимость. И только тогда на него можно получить чёткий ответ.

Вот к примеру. Задаёшь ты вопрос о перезаписи поста. при том, что такое событие в реальности произойти не может.
Данные в сессии, В СЛУЧАЕ, который ты привёл для примера, хранятся доли секунды - пока браузер словит редирект иотправит запрос. Всё - дальше они не нужны и убиваются. И попасть в эти доли секунды просто нереально.

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

-~{}~ 13.01.07 02:57:

Собственно, я так и не понял твоих затруднений.
Судя по ответам, ты что-то в технологии шаришь. Само пространство для манёвра, оставляемое нам протоколом НТТР - очень маленькое. Все варианты можно перечислить по пальчам самостоятельно. То есть, ты и сам всё прекрасно видел, но только хотел убедиться?

В этому случае рекомендую бритву Оккама. Очень полезная вещь - отвечает на такие вопросы влёт
 

WP

^_^
Фанат
А тут дело не в долях секунды, а в том что файл с сессий на время выполнения скрипта блокируется, и второй скрипт будет ждать пока первый не разблокирует.


А я вообще не делаю редиректов - не вижу в этом смысла, кроме как на форуме редиректить на пост.
 

Фанат

oncle terrible
Команда форума
ну, мы, вроде это обсуждали уже - недостаток у тебя знаний и опыта =)
 

Phristen

Новичок
Г.Г.Маркес, Впечатления от поездки по СССР, 1957 год
Ну и что дальше? Мне покраснеть, и скромно потупить глазки? Я и не скрываю, что для меня PHP нов.
Так что, повторюсь - не надо считать сидящих здесь людей идиотами
У меня есть встречное предложение: не надо считать за меня, что я считаю.
И не надо видесь в каждом моём слове оскорбления, вперемешку со скрытыми намёками и высокомерным пренебрежением к собеседникам. Там ничего такого нет и в помине.
И вариантов решения бывает много. Не надо думать, что ты знаешь их все.
Именно потому, что вариантов может быть много, я и пытался узнать, есть ли другие способы решения задачи. С чего ты взял, будто я считаю себя эдаким гением, решительно непонятно. Считал бы гением, не задавал бы здесь вопросов.

Сколько яду, и всё не по делу.


P.S.
Собственно, я так и не понял твоих затруднений
Так вопрос уже решен. Наичная со второго поста этой темы. Тем паче, если других вариантов всё равно нет.
 

WP

^_^
Фанат
Это означает недостаток знаний опыта если человек не видит (не знает) других вариантов, и у него нет осознанного выбора, но у меня-то он есть, я пробовал делать с редиректом и мне это не понравилось. Каждый раз на диск писать, а потом читать нерационально, и просто некрасиво как-то. Нужно уметь видеть когда стоит поступиться красотой и удобством в одной программе чтобы обеспечить адекватность поведения другой, а когда не стоит. Так вот в данном случае не стоит на сервере такие извращения делать ради кнопки Назад в неадекватном мелкомягком броузере. Куда рациональнее сделать отправку данных JS'ом, и там уже рефреш если нужен.
 

Фанат

oncle terrible
Команда форума
Да ладно. Ты не видел, когда я много яду пишу =)))
Здесь, поверь, я не хотел тебя обидеть. А только лишь указать на тот факт, что негоже тебя три раза подряд за язык тянуть.
Ты бы не на яд смотрел, а на то что по делу.
 

С.

Продвинутый новичок
Phristen,

Когда POST данные приходят первый раз, ты их используешь и делаешь все дела с ними, какие тебе нужны. ПОТОМ делаешь редирект. Там эти данные уже не нужны, поэтому и нет необходимости в их сохранении в сессии.
 

Фанат

oncle terrible
Команда форума
Куда рациональнее
Когда я слышу слово "рациональнее", я хватаюсь за пистолет...

пожалуйста, воздержись от оффтопика. если тебя интересует отправка пост данных без перезагрузки страницы - задай этот вопрос в другом месте. здесь же обсуждается другой вопрос.
 
Сверху