ФорумПрограммированиеPHP для идиотов → [solved] повтораная отправка: редирект не помогает

[solved] повтораная отправка: редирект не помогает

  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 1:40, спустя 18 секунд

    Что-то фиговина какая-то. От работы я теряю остатки разума.

    Я нахожусь на странице /files/add заполняю форму, отправляю ее методом пост на адрес /files/add?do=addSave. Там она проверяется, резалты записываются в базу и я делаю exit(header('Location: /files/view/' . $this->id)); Меня редиректит, но поцчему-то я могу нажать F5 и отправить ее заново.

    Что я делаю не так?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 0:30, спустя 22 часа 50 минут 40 секунд

    exit(header('Location: /files/view/' . $this->id));


    криво как то ты сократил, не делай так…
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 0:32, спустя 1 минуту 42 секунды

    function noCache()
    {
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');
    }

    noCache();
    exit(header('Location: http://' . $_SERVER['HTTP_HOST'] . '/files/view/' . $this->id));

    исправно редиректит на страницу, но все равно можно по F5 отправить форму. Что же я все-таки делаю не так?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 1:16, спустя 43 минуты 28 секунд

    нашел на ЛОРе подобную проблему
    http://www.linux.org.ru/view-message.jsp?msgid=4214174&lastmod=1257699563501

    хуйня какая-то. Зачем везде советуют header-location если он оказывается не спасает?
    Или буду ибаться через сессии, или попробую через 3 скрипт перенаправление делать.

    даже после exit(header('Location: http://ya.ru')); могу повторно отправить форму.
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 1:24, спустя 8 минут 25 секунд

    ты попробуй сначала хедер отправить а уж только потом делать exit.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 1:29, спустя 4 минуты 50 секунд

    header('Location: http://ya.ru', true);
    usleep(200);
    exit;

    не работае
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 1:39, спустя 10 минут 37 секунд

    ГАГАГА!!!!

    <?php
    while (ob_get_level())
    ob_end_clean();
    // проблема не в exit, не в короткой ссылке а в(о вложенной) буферизации вывода.
    exit(header('Location: /files/view/' . $this->id));


    Twig уже порядком начинает меня заебывать. Сначала он ловил все мои исключения, чего я не просил его делать, теперь творит такое гавно с редиректом.

    тонны ненависти на пiха.ру
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 8:12, спустя 6 часов 32 минуты 12 секунд

    Абырвалг, то есть header location на самом деле не срабатывал из-за того, что перед ним был вывод, да?


    а, бля, E_ALL ты не включаешь пока отлаживаешся? какбы должны быть нотисы "невозможно послать хидер".
    думаю twig непричем. надо саму логику страницы делать так, чтобы все проверки и вычисления были до вывода.
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 10:48, спустя 2 часа 36 минут

    Нееет. Ну я не такой даун, что б выводить что-то а потом слать header. У меня E_ALL без нотайсов. Нотайсы отключил из-за старого шаблонизатора phparser (в нем не проверяется наличие ключей в массиве). Как только полностью перейду на Twig, будет E_ALL.

    Перенаправление срабатывало. Но можно было нажать F5 и повторно заслать форму. Ну а тут я перед редиректом начал чистить буфер вывода, и F5 уже не актуально.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 10:56, спустя 8 минут 46 секунд

    Абырвалг, то есть ты хочешь сказать, что при каком то выводе после заголовка location: браузер позволяет еще раз засабмитить форму? пиздец какой то со стороны браузеров, такая дурость.
    Спустя 10 сек.
    нахуй это надо?!
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 11:11, спустя 14 минут 10 секунд

    я не знаю. А что, все то гавно, которое я забуферизировал после exit вываливается наружу?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 11:30, спустя 19 минут 52 секунды


    я не знаю. А что, все то гавно, которое я забуферизировал после exit вываливается наружу?
    ну забуферизировал если с помощью echo и прочих, то да, конечно. после завершения работы скрипта, буфер очищается выбрасывая все в выходной поток, в данном случае это поток вебсервера какой то)
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 декабря 2009 г. 11:38, спустя 7 минут 19 секунд

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

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 12:49, спустя 1 час 10 минут 49 секунд

    ну какие косяки могут быть? я сделал очистку буферизации и все заработало.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 14:40, спустя 1 час 51 минуту 11 секунд

    Абырвалг,
    /files/add – здесь форма, которая делает post-запрос
    /files/add?do=addSave – обрабатывает post. покидаем по header location. по-идее никакого вывода здесь нет! какой нахуй ob_end_clean ?
    /files/view/xxx – эта страничка выводит результат. никаких post-посылок она не обрабатывает

    скажи, у тебя для add и view один модуль на всё (через mod_rewrite)? если да — разнеси по разным модулям для теста. где-то ты потерял контроль и делаешь лишнюю работу. не еби себе мозг, ob_end_clean здесь рояля не играет
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!