代码之家  ›  专栏  ›  技术社区  ›  GorillaApe

PRG模式问题?

  •  2
  • GorillaApe  · 技术社区  · 15 年前

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

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

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

    我不知道其他网站是怎么处理的。。。我看到一个带有注册表的网站,它在成功注册后在同一个URL下显示一条消息,并在执行back/forward时正常工作。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Jon    15 年前

    不要将消息存储在 $_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
    

    如果用户返回并转发,则消息仍将正常显示。它还避免了与会话状态相关的任何问题。

    推荐文章