PRG模式问题?

时间:2010-11-28 15:00:38

标签: php redirect

我在我的应用程序中使用POST/REDIRECT/GET模式。但是,我有一个问题:

如果我想在GET阶段显示一条消息,我可以在POST阶段将其存储为会话变量(当决定应显示哪条消息时),例如$_SESSION['message']='mplampla';

使用此技术,应在显示消息后取消设置,以免在其他页面中再次错误地显示该消息。但是如果用户返回然后再转发到GET页面,则该消息将不会第二次显示,因为它第一次被取消设置。

我不知道其他网站如何管理这个...我看过一个带有注册表单的网站,该网站在成功注册后会在相同的网址下显示一条消息,并在进行后退/前进时正常工作。

1 个答案:

答案 0 :(得分:4)

不要将邮件存储在$_SESSION中。而是将其作为参数传递给您的GET页面。

例如,在GET阶段,将用户重定向到

http://localhost/widget.php?edit=1&message=saved

然后,在widget.php执行:

$message = isset($_GET['message']) ? $_GET['message'] : null;
$output = null;
switch($message) {
    case 'completed': // possibly use a constant here, eg MESSAGE_COMPLETED
        $output = 'Your changes has been saved.';
        break;
    case 'failed':
        $output = 'ERROR: failed to save changes!';
        break;
}

// Now present $output to the user anyway you like

如果用户前后移动,该消息仍会正常显示。它还避免了与会话状态有关的任何问题。