【问题标题】:Refresh browser without "Confirm Form Resubmission" in perl在perl中没有“确认表单重新提交”的刷新浏览器
【发布时间】:2015-01-14 21:26:42
【问题描述】:

我有一个 perl 脚本,它打印出 HTML 代码并根据 HTML 页面中的用户输入运行操作。我希望能够禁用“确认表单重新提交”警告并防止用户重复上次运行的命令。我在 php 中看到了一些解决此问题的帖子,但不确定如何使用 perl 来解决。

谢谢!

【问题讨论】:

    标签: html perl google-chrome browser


    【解决方案1】:

    防止这种情况的常用技术是Post/Get Redirect pattern

    这不会阻止浏览器的行为,但它会在成功 POST 后将用户重定向到新页面,因此如果他们刷新,他们不会重复 POST,而是重复 GET,这不会引起警告。

    这是一个流程示例:

    • 获取“产品/创建”
    • 用户输入一些信息
    • 发布“产品/创建”
    • 验证失败,重新显示带有警告的表单 - 用户更正输入
    • 发布“产品/创建”
    • 验证通过,项目保存重定向,使用 GET 到“Products/View/5”
    • 用户刷新页面,这会导致无害的 GET "Products/View/5"

    要发出重定向,您可以使用:

    use CGI;
    my $query=new CGI;
    print $query->redirect('http://www.example.com/newpage');
    

    【讨论】:

    • 对不起,也许我不明白,当我输入该代码时,我实际上在我的页面上打印出像“状态:302 移动位置:test.pl”这样的东西的实际重定向。如果我在打印“Content-type: text/html\n\n”之前输入该代码;然后它让我进入一个无限重定向循环
    • 您必须仅在 POST 成功时运行代码,而不是在任何其他时间。必须在写入任何内容之前放置重定向(正如您所发现的那样)。
    • 现在完全有道理,我不知道我一开始是怎么不明白的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2011-02-16
    • 2015-11-16
    • 2011-03-09
    • 2011-12-21
    • 2018-01-20
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多