Session put 似乎无法正常工作
Session put does not seem to be working properly
我正在与 Laravel 5.8 合作,我想确保用户只能每 2 小时提交一次表单(只要会话处于活动状态)。
所以我在控制器上尝试了这个:
if(Session::has('request_has_been_sent')){
return redirect()->back()->with('error', 'You just submitted a request and cannot submit a new one');
}else{
$withDraw = WithdrawWallet::create([
'balance_value' => $request->balance_wallet,
'can_draw' => $request->can_draw,
'shaba_number' => $request->shaba_number,
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'description' => $request->desc,
'status' => 'pending',
'user_id' => auth()->user()->usr_id,
]);
Session::put('request_has_been_sent');
}
return redirect()->back()->with('success','Your request was sent');
因此,每次用户提交新请求时,都必须设置会话 request_has_been_sent
。
因此,下次用户提交表单时,如果会话仍然存在,则会出现消息 You just submitted a request and cannot submit a new one
。
但现在的问题是它不起作用。事实上,用户仍然可以在提交请求后立即提交另一个请求。
这意味着会话未以某种方式设置。
那么这里出了什么问题?我怎样才能正确地做到这一点?
您可以使用 set
和 put
方法设置会话
Session::put('name','value');
使用 get
检索它
Session::get('name')
所以在你的情况下你需要设置你的会话使用
Session::put('request_has_been_sent','yes');
并检查是否已设置使用
if(Session::get('request_has_been_sent')){
我认为您这里唯一的问题是没有将会话值设置为您需要的任何值,否则 laravel 将忽略它。
Session::put('request_has_been_sent', true);
// Check if it exists, this will check if it exists without getting it
Session::has('request_has_been_sent')
一旦用户注销,所有用户会话都将被清除。这意味着用户并创建 WithdrawWallet
并注销然后再次登录然后用户可以创建另一个 WithdrawWallet
以便修复您可以使用缓存
$cacheKey = WithdrawWallet::class.'.'.auth()->user()->usr_id;
if (Cache::has($cacheKey)) {
return redirect()->back()->with('error', 'You just submitted a request and cannot submit a new one');
} else {
$withDraw = Cache::remember($cacheKey, now()->addHours(2), function () use ($request){
return WithdrawWallet::create([
'balance_value' => $request->balance_wallet,
'can_draw' => $request->can_draw,
'shaba_number' => $request->shaba_number,
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'description' => $request->desc,
'status' => 'pending',
'user_id' => auth()->user()->usr_id,
]);
});
}
return redirect()->back()->with('success', 'Your request was sent');
我正在与 Laravel 5.8 合作,我想确保用户只能每 2 小时提交一次表单(只要会话处于活动状态)。
所以我在控制器上尝试了这个:
if(Session::has('request_has_been_sent')){
return redirect()->back()->with('error', 'You just submitted a request and cannot submit a new one');
}else{
$withDraw = WithdrawWallet::create([
'balance_value' => $request->balance_wallet,
'can_draw' => $request->can_draw,
'shaba_number' => $request->shaba_number,
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'description' => $request->desc,
'status' => 'pending',
'user_id' => auth()->user()->usr_id,
]);
Session::put('request_has_been_sent');
}
return redirect()->back()->with('success','Your request was sent');
因此,每次用户提交新请求时,都必须设置会话 request_has_been_sent
。
因此,下次用户提交表单时,如果会话仍然存在,则会出现消息 You just submitted a request and cannot submit a new one
。
但现在的问题是它不起作用。事实上,用户仍然可以在提交请求后立即提交另一个请求。
这意味着会话未以某种方式设置。
那么这里出了什么问题?我怎样才能正确地做到这一点?
您可以使用 set
和 put
方法设置会话
Session::put('name','value');
使用 get
检索它Session::get('name')
所以在你的情况下你需要设置你的会话使用
Session::put('request_has_been_sent','yes');
并检查是否已设置使用
if(Session::get('request_has_been_sent')){
我认为您这里唯一的问题是没有将会话值设置为您需要的任何值,否则 laravel 将忽略它。
Session::put('request_has_been_sent', true);
// Check if it exists, this will check if it exists without getting it
Session::has('request_has_been_sent')
一旦用户注销,所有用户会话都将被清除。这意味着用户并创建 WithdrawWallet
并注销然后再次登录然后用户可以创建另一个 WithdrawWallet
以便修复您可以使用缓存
$cacheKey = WithdrawWallet::class.'.'.auth()->user()->usr_id;
if (Cache::has($cacheKey)) {
return redirect()->back()->with('error', 'You just submitted a request and cannot submit a new one');
} else {
$withDraw = Cache::remember($cacheKey, now()->addHours(2), function () use ($request){
return WithdrawWallet::create([
'balance_value' => $request->balance_wallet,
'can_draw' => $request->can_draw,
'shaba_number' => $request->shaba_number,
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'description' => $request->desc,
'status' => 'pending',
'user_id' => auth()->user()->usr_id,
]);
});
}
return redirect()->back()->with('success', 'Your request was sent');