我曾經使用過此question走了,但得到的答覆張貼他們並沒有解決我的問題。Laravel 4:防止形式重新提交
發生的是,如果用戶點擊瀏覽器的後退按鈕返回到提交表單,輸入的數據仍然存在,並且用戶能夠將問題「補辦」的形式。 如何防止這種行爲(laravel的方式)?
我route.php看起來像
Route::group(array('after' => 'no-cache'), function()
{
Route::get('/', '[email protected]');
Route::ANY('/search','[email protected]');
Route::get('user/login',array('as'=>'user.login','uses'=>'[email protected]'));
Route::post('user/login',array('as'=>'user.login.post','uses'=>'[email protected]'));
Route::get('user/logout',array('as'=>'user.logout','uses'=>'[email protected]'));
Route::post('user/update/{id}',array('as'=>'user.update','uses'=>'[email protected]'));
Route::group(array('before' => 'auth'), function()
{
Route::get('user/profile',array('as'=>'user.profile','uses'=>'[email protected]'));
Route::get('order/checkout','[email protected]');
Route::get('order/status',array('as'=>'order.status','uses'=>'[email protected]'));
Route::group(array('before' => 'csrf'), function()
{
Route::post('order/process','[email protected]');
});
});
});
filter.php
Route::filter('csrf', function()
{
if (Session::token() != Input::get('_token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
Route::filter('no-cache',function($route, $request, $response){
header("Cache-Control: no-cache,no-store, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
});
控制器代碼
public function process(){
//data is saved to database
Session::put('_token', md5(microtime()));
return Redirect::route('order.status');
}
public function orderStatus(){
return View::make('orderStatus')->with('message','done');
}
你說他們可以按後退按鈕並且只能「查看」表單 - 或者他們是否可以使用上面的代碼第二次提交表單? – Laurence
@TheShiftExchange他們可以提交表單第二次。 –
你確定你正在使用process()函數嗎?我只是運行你的代碼 - 它的工作原理 - 我不能提交兩次。如果(Session :: token()!= Input :: get('_ token'))改爲if(Session :: token()!='44444')並查看錶單是否默認失敗,也許路線沒有被擊中? – Laurence