私は現在、RESTfulアプリケーション(http://peej.github.com/tonic/)を構築するためにTonic PHPフレームワークを使用しています。誰かがログアウトした後にリダイレクトする方法についてはわかりません。奇妙な部分は、ログインがうまく動作することです。Tonic RESTfulアプリケーションリダイレクトしない
私の基本的なコードはこれをリストしています:ユーザーがログインすると、簡単なフォームに記入します。送信ボタンを押して、フォームがある同じページへの投稿要求を行います。ポスト処理コードは次のようになります(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コードは、ログインするための適切なメニューやものをすべて出力しています。
私がしていた問題は、ログアウトのためにWebページのメニューバーに直接入っています。私はどちらもうまく動作しないために2つの方法を試しました。webspace.com/logoutのページへのhrefを持つ簡単なアンカータグと、通常のリンクのように見えるようにメニューに再送されたサブミットボタンだけをフォームに入れます。メソッドを同じページに追加します。それらの両方は、このコードがあります。どちらかのアンカータグやフォームを通じて、このコードは、メニューバーから使用されている場合には(様々な事をしようと、あるいはその上に少なくともバリエーション)
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コードは、ログアウトしたときに別のページに移動した瞬間にも、現在ログインしているような状態にメニューバーを残すあなたが既に正常にログアウトしたことを意味します。私はいろいろ試してみましたが、ブラウザバーを通って直接うまく動作し、セッション変数を設定しないとうまく動作しません。 (私が見た限りでは)何が起こっているのか分かりません。事前に助けていただきありがとうございます。