【问题标题】:Preventing resubmission of form data Laravel 5.5防止重新提交表单数据 Laravel 5.5
【发布时间】:2017-12-09 10:41:30
【问题描述】:

我正在开发 Laravel 5.5 框架。 我有一个这样的表单主页:

<form action = "/result" method = "post">
<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>">
<table>
        <tr>
           <td>Name or Nickname</td>
           <td><input type = "text" name = "name_nickname" autofocus /></td>
        </tr>
<tr>
              <input type = "submit" value = "LuckyNumber" />
           </td>
        </tr>
</table>

控制器如下所示:

class SixGetController extends Controller
{
public function luckyNumber(Request $request){

  $nameNickname = $request->input('name_nickname');
  $luckyNumber = rand (1,10);

DB::table('visitor')->insert(
  ['name_nickname' => $nameNickname, 'luckyNumber' => $luckyNumber]);

return view('result', ['nameNickname' => $nameNickname, 'luckyNumber' => 
$luckyNumber]);
}

结果页面如下所示:

<p><?php echo $nameNickname; ?>  </p>
<p>Your lucky number is <?=$result?> .</p>

如果用户按下重新加载 F5 按钮,脚本将重新滚动随机数生成器并使用重新滚动的数字重新提交数据。我读过关于我不知道如何使用的 PGR 模式以及关于操纵历史的一些我也不了解的内容。有人可以指出我在某处放置了什么样的代码来防止重新滚动和重新提交。谢谢。

【问题讨论】:

  • 它的P.R.G ... Post Redirect Get ... 当您处理post 请求时,您返回一个重定向.. 浏览器然后发送GET 请求以获取该新位置...他们可以刷新所有他们想要的,因为这只是对资源的get 请求,没有 POST ......这是我们重定向离开的上一个请求......并且在这些框架中总是从这些处理端点返回重定向...视图应该从get请求返回...它是一个非常简单的系统,你将永远知道你在哪里..如果你看到一个页面,你知道它基本上是一个GET请求

标签: laravel submission


【解决方案1】:

对于 laravel 实现,可以使用Session Flash Data

有时您可能希望将项目存储在会话中仅用于下一个 要求。您可以使用 flash 方法执行此操作。数据存储在 使用此方法的会话将仅在后续期间可用 HTTP 请求,然后会被删除。闪存数据主要是有用的 对于短暂的状态消息:

在这种情况下,当有人发出 post 请求时,您应该将有用的数据存储到 session,并将它们重定向到其他路由。然后其他路由可以检索有用的数据以显示到视图,并且用户在刷新页面时不再重新提交表单。

public function luckyNumber(Request $request) {
    ...
    $request->session()->flash('nameNickname', $nameNickname);
    $request->session()->flash('luckyNumber', $luckyNumber);
    return redirect()->action('SixGetController@resultView');
}

public function resultView(Request $request) {
    $nameNickname = $request->session()->get('nameNickname');
    $luckyNumber = $request->session()->get('luckyNumber');
    return view('result', ['nameNickname' => $nameNickname, 'luckyNumber' => $luckyNumber]);
}

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2013-07-24
    • 2011-04-24
    • 2018-04-11
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2017-07-21
    相关资源
    最近更新 更多