我目前正在使用Tonic PHP框架來構建一個RESTful應用程序(http://peej.github.com/tonic/),並且遇到了一個問題,我無法弄清楚如何在有人註銷後重定向用戶。奇怪的部分是登錄工作很好。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代碼輸出所有正確的菜單和用於登錄的東西。
然後我遇到的問題是直接在我的網頁上的菜單欄內註銷註銷。我嘗試了兩種不工作的方法:一個簡單的錨定標記,其中href指向頁面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;
}
(或上至少一些變化,嘗試各種事物)當此代碼是從菜單欄中使用,無論是通過一個錨標記或表單提交按鈕,它會去到/註銷頁面,只停留在那裏,輸出任何正文文本(如果存在)。檢查用戶是否「登錄」的PHP代碼甚至不會觸發,使菜單欄處於當前登錄狀態,即使轉到其他頁面時它會更改爲已註銷代碼,這意味着您已經成功註銷。我嘗試了各種各樣的東西,直接通過瀏覽器欄直接進入就可以正常工作,而不會設置會話變量也會導致它正常工作。 (據我所見)我不知道發生了什麼。感謝您提前提供任何幫助。