PHP,在刷新时禁用POST&显示消息

时间:2016-03-01 18:04:41

标签: php forms session post http-headers

我有一个包含此代码的表单:

header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");

所以基本上,只要访问者点击提交,页面刷新,我就会进行操作。一切都运行得很好,但似乎我必须在禁用重新发布刷新之间做出选择:

[HttpPost]
public ActionResult JsonNewsfeed(int id)
{
    var db = new dekhosaleEntities1();
    sale s = db.sales.First(m => m.sale_id == id);
    List<sale> sale1 = db.sales.ToList();
    saleviewmodel model = new saleviewmodel
    {
        currentsale = s,
        Sales = sale1
    };
    return Json(model);  
}

或显示我错误&amp;成功消息,但如果我这样做,如果访问者刷新页面,则重新提交。

我在线阅读了两个解决此问题的方法:

  • 重定向到另一个页面(不能采用这条路线,因为它会打破访问流程)
  • 将我的消息数组存储在SESSION变量中(我的问题是,如果用户刷新或重新访问消息数组需要为空的页面,SESSION最终会停留太长时间......)

那么,还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:2)

为ex创建一个uniqe票证,如时间戳。将它作为表单的附加参数。现在,您可以将处理后的请求存储在会话或cookie中。一个简单的例子:

客户端:

<form method="post" enctype="multipart/form-data">
    <input type="hidden" name="requestTicket" value="<?php echo time(); ?>" />
    ...

服务器:

if(!array_key_exists("rt", $_SESSION))
    $_SESSION["rt"] = array();

if(!array_key_exists($_REQUEST["requestTicket"], $_SESSION["rt"])) {
    //do the job
    //...

    $_SESSION["rt"][$_REQUEST["requestTicket"]] = true;
}