我目前正在使用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代码甚至不会触发,使菜单栏处于当前登录状态,即使转到其他页面时它会更改为已注销代码,这意味着您已经成功注销。我尝试了各种各样的东西,直接通过浏览器栏直接进入就可以正常工作,而不会设置会话变量也会导致它正常工作。 (据我所见)我不知道发生了什么。感谢您提前提供任何帮助。