В настоящее время я использую фреймворк 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, если пользователь не «залогинен», даже не срабатывает, оставляя строку меню в состоянии, похожем на то, что вы вошли в систему, даже если вы переходите на другую страницу, она меняется на вышедшую из системы. код, то есть вы уже успешно вышли из системы. Я пробовал разные вещи, и просто проход туда через панель браузера будет работать нормально, и если не установить переменную сеанса, это также будет работать нормально. (насколько я видел) Я понятия не имею, что происходит. Заранее благодарю за любую помощь.