W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
注意:要利用會話阻止,您的應用程序必須使用支持 atomic locks 的緩存驅(qū)動。 當前,這些緩存驅(qū)動包括
memcached
,dynamodb
,redis
和database
驅(qū)動程序。 另外,您不能使用cookie
驅(qū)動。
默認情況下,Laravel 允許使用同一 session 的請求并發(fā)執(zhí)行。 例如,如果您使用 JavaScript HTTP 庫向應用程序發(fā)出兩個 HTTP 請求,則它們將同時執(zhí)行。 對于許多應用程序來說,這不是問題。 但是,在一小部分應用程序中可能會丟失 session 數(shù)據(jù),這些應用程序會向兩個不同的應用程序端點同時發(fā)出請求,這兩個端點都將數(shù)據(jù)寫入 session。
為了處理這種情況,Laravel 允許您限制指定會話的并發(fā)請求。 首先,您可以簡單地在定義路由時調(diào)用 block
方法。 在這個例子中,進入到 /profile
端點的請求將添加會話鎖。 在會話鎖期間,/ profile
或 / order
端點共享相同 session ID 的任何請求都將等待第一個請求執(zhí)行完成,然后再繼續(xù)執(zhí)行:
Route::post('/profile', function () {
//
})->block($lockSeconds = 10, $waitSeconds = 10)
Route::post('/order', function () {
//
})->block($lockSeconds = 10, $waitSeconds = 10)
block
方法接受兩個可選參數(shù)。 第一個參數(shù)是會話鎖在釋放之前應保持的最大秒數(shù)。 當然,如果請求在此時間之前完成執(zhí)行,則鎖將更早釋放。
第二個參數(shù)是請求嘗試獲得會話鎖時應等待的秒數(shù)。 如果請求無法在給定的秒數(shù)內(nèi)獲得會話鎖,則將拋出 Illuminate\Contracts\Cache\LockTimeoutException
。
如果這些參數(shù)都未傳遞,那么將最多獲得 10 秒的鎖定,而嘗試獲得鎖定的請求將最多等待 10 秒:
Route::post('/profile', function () {
//
})->block()
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: