Приложение Tonic RESTful не перенаправляет - PullRequest
0 голосов
/ 28 января 2012

В настоящее время я использую фреймворк Tonic PHP для создания приложения RESTful (http://peej.github.com/tonic/) и у меня возникла проблема, которую я не могу понять, как обойтись с перенаправлением пользователя после того, как кто-то вышел из системы. Странно то, что вход в систему работает просто отлично.

Мой основной код работает, перечислите это: когда пользователь заходит в систему, он заполняет простую форму и нажимает кнопку отправки, чтобы отправить запрос на ту же страницу, на которой находится форма. (website.com/login) Код обработки сообщений выглядит следующим образом:

public function post( $request )
{
    if( isset( $_POST[ 'username' ] ) && $_POST[ 'username' ] === 'username' &&
            isset( $_POST[ 'password' ] ) && $_POST[ 'password' ] === 'password' )
        {
            $_SESSION[ 'loggedin' ] = true;
            $response = new Response( $request );
            $response->addHeader( 'Location', '/' );
            return $response;
        }
        else
        {
            $response = new Response( $request );
            $response->addHeader( 'Location', '/login/fail' );
            return $response;
        }
}

(текущий код - всего лишь временная вещь, поэтому я могу проверить функциональность). Это позволит правильно установить переменную сеанса и перенаправить обратно на мою индексную страницу, а мой код PHP выведет все нужные меню и вещи для входа в систему.

Проблема, с которой я столкнулся, заключается в том, что кнопка выхода прямо из строки меню на моей веб-странице позволяет выйти из системы. Я попробовал два способа для этого, но ни один из них не работал: простой тег привязки с ссылкой на страницу webspace.com/logout и размещение в меню формы с помощью кнопки «рестайлинг», чтобы она выглядела как обычная ссылка, используя post в качестве метод на той же странице. У них обоих есть этот код:

public function post( $request )
{
    $response = new Response( $request );
    $response->code = Response::MOVEDPERMANENTLY;
    $response->addHeader( 'Location', '/' );
    $response->body = "<b>Succesfully logged out!</b>";
    $_SESSION[ 'loggedin' ] = false;
    return $response;
}

(или, по крайней мере, варианты этого, пробуя разные вещи) Когда этот код используется из строки меню, либо через тег привязки, либо через кнопку отправки формы, он переходит на страницу / logout и просто остается там, выводя любой основной текст, если он существует. Проверка кода PHP, если пользователь не «залогинен», даже не срабатывает, оставляя строку меню в состоянии, похожем на то, что вы вошли в систему, даже если вы переходите на другую страницу, она меняется на вышедшую из системы. код, то есть вы уже успешно вышли из системы. Я пробовал разные вещи, и просто проход туда через панель браузера будет работать нормально, и если не установить переменную сеанса, это также будет работать нормально. (насколько я видел) Я понятия не имею, что происходит. Заранее благодарю за любую помощь.

1 Ответ

0 голосов
/ 28 января 2012

Неважно, я осознал проблему (которая была просто глупостью): я делал вывод на страницу ПЕРЕД созданием заголовка Location, в результате чего браузер игнорировал его. Перемешивание порядка операций на моей главной странице решило проблему.

Пусть это будет предупреждением для всех: убедитесь, что вы выпускаете заголовки, прежде чем выводить какой-либо код в браузер, несмотря ни на что. В моем случае это потребовало от меня выполнения всего кода обработки для текущего URI перед моим HTML-кодом, а затем отправки вывода из запроса в браузер в правильном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...