Laravel自带的auth认证的性能问题

Laravel自带的auth认证的性能问题,自带的auth middleware,每次刷新页面都会去数据库查询一下当前用户的信息,随后再做验证。这样似乎性能很差。如果不自己重新写middleware的情况下,怎样改造一下能缓存住用户登陆信息,不至于每次都查询数据库。 谢谢大家

JellyBool

没记错的话,是根据 session 来判断的吧,你是什么样的需求出现这个 每次刷新都查询数据库?

daniel.kong

每次刷新页面的时候,laravel都去数据库查询当前用户的信息。只要这个路由用了auth的middleware做保护。例如:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function() {
    Route::group(['middleware' => 'auth:web'], function() {

        Route::get('/api-key/index', ['uses' => 'ApiKeyController@index', 'as' => 'admin.api_key.index']);
        Route::get('/api-key/all-access-tokens', ['uses' => 'ApiKeyController@allAccessTokens', 'as' => 'admin.api_key.all_access_tokens']);
        Route::post('/api-key/destroy-tokens', ['uses' => 'ApiKeyController@destroy', 'as' => 'admin.api_key.destroy']);
        Route::resource('seller','SellerController');
    });
});

这些在auth验证保护下的路由每次刷新就会去查询一次数据库,用laravel-debugbar可以跟踪到.

daniel.kong

laravel 5.2开始自带的auth认证,每次刷新页面验证用户auth时都会去查询当前登陆用户的信息。执行一句sql:
select top 1 * from [adm_users] where [adm_users].[adm_user_id] = ‘16’

daniel.kong

如果说每次点击一个页面或者刷新一下,就要去查询一次DB,这种消耗太大。难道一定要自己去写一个middleware?目前用的是laravel5.3的auth。只要把路由移出middleware的保护,就不会生成这条sql。

daniel.kong

似乎也有人碰到类似问题,http://forum.laravelacademy.org/d/48-auth

如果不重新自己写个auth middleware,可以有什么小改动或者什么小技巧把这个问题解决了?如果一个在线项目访问量比较大的情况下,这种无谓的消耗真的很蛋疼

JellyBool 回复 daniel.kong

嗯哼,那这样来说的话,确实需要自己修改一下这个 auth 了,目前来说我没有修改过,可以瞅瞅。

daniel.kong

如果找到解决方案,麻烦分享一下。谢谢 过多的DB查询很影响性能。

shadow610

收藏关注ing

Bantes

关注一下,有解决方案了吗?