2012-01-27 2 views
0

私は現在、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コードは、ログアウトしたときに別のページに移動した瞬間にも、現在ログインしているような状態にメニューバーを残すあなたが既に正常にログアウトしたことを意味します。私はいろいろ試してみましたが、ブラウザバーを通って直接うまく動作し、セッション変数を設定しないとうまく動作しません。 (私が見た限りでは)何が起こっているのか分かりません。事前に助けていただきありがとうございます。

答えて

0

気にしないで、私は問題に気づきました(私はばかだと思っていました):私はLocationヘッダーを発行する前にページに出力していました。私のメインページのちょっとした操作の順番を入れ替えて問題を解決しました。

これはすべての人に警告する:ブラウザにコードをエコーする前にヘッダーを発行するようにしてください。私の場合、これは私のHTMLコードの前に現在のURIのすべての処理コードを実行し、要求からの出力を正しい場所にあるブラウザに送ることを要求しました。

関連する問題