Laravel 5.1 - 未根据请求设置会话存储

时间:2015-12-24 01:46:52

标签: php laravel

我试图在WAMP上将Laravel 4.1应用程序升级到5.1,并出现此错误:

  

Request.php第775行中的RuntimeException:未设置会话存储   请求。

     

在   d:\瓦帕\ WWW \ laravel-5.1 \厂商\ laravel \框架\ SRC \照亮\ HTTP \ Request.php   请求 - >会话()中的第775行   d:\ WAMP \ WWW \ laravel-5.1 \供应商\ laravel \框架的\ src \照亮\基金会\ HTTP \中间件\ VerifyCsrfToken.php   在VerifyCsrfToken-> addCookieToResponse(对象(请求),第137行,   对象(Response))在VerifyCsrfToken.php第64行中   VerifyCsrfToken->句柄(对象(Request),对象(Closure))at   call_user_func_array(array(object(VerifyCsrfToken),'handle'),   在Pipeline.php第124行中的array(object(Request),object(Closure)))   Pipeline-> Illuminate \ Pipeline {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   30在Pipeline-> Illuminate \ Routing {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   103在Pipeline->然后(对象(Closure))在ControllerDispatcher.php中   96号线   ControllerDispatcher-> callWithinStack(对象(BrowseController),   对象(Route),对象(Request),'getBrowseRecent')in   ControllerDispatcher.php第54行at   ControllerDispatcher-> dispatch(对象(Route),对象(Request),   'App \ Http \ Controllers \ BrowseController','getBrowseRecent')in   在Route-> runController(对象(请求))中的Route.php第174行   Route.php第140行在Route->在Router.php行中运行(对象(请求))   703在Router-> Illuminate \ Routing {closure}(对象(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   139在Pipeline-> Illuminate \ Pipeline {closure}(object(Request))in   ViewThrottleMiddleware.php第55行   ViewThrottleMiddleware->句柄(对象(Request),对象(Closure))at   call_user_func_array(array(object(ViewThrottleMiddleware),'handle'),   在Pipeline.php第124行中的array(object(Request),object(Closure)))   Pipeline-> Illuminate \ Pipeline {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   30在Pipeline-> Illuminate \ Routing {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   103在Pipeline->然后(对象(Closure))在Router.php第705行at   Router-> runRouteWithinStack(object(Route),object(Request))in   Router.php第678行在Router-> dispatchToRoute(object(Request))中   在Router-gtp中的Router.php第654行,在Kernel.php中的dispatch(对象(请求))   第246行   Kernel-> Illuminate \ Foundation \ Http {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   139在Pipeline-> Illuminate \ Pipeline {closure}(object(Request))in   CheckForMaintenanceMode.php第44行   CheckForMaintenanceMode-> handle(object(Request),object(Closure))at   call_user_func_array(array(object(CheckForMaintenanceMode),'handle'),   在Pipeline.php第124行中的array(object(Request),object(Closure)))   Pipeline-> Illuminate \ Pipeline {closure}(object(Request))at   Pipeline.php行中的call_user_func(object(Closure),object(Request))   103在管道 - >然后(对象(Closure))在Kernel.php第132行at   Kernel.php行中的Kernel-> sendRequestThroughRouter(object(Request))   在index.php第54行中的Kernel->句柄(对象(请求))中的99

storage文件夹是可写的,使用的会话驱动程序是file。我搜索整个项目session(),但发现它无处可寻。我该怎么做才能纠正这个错误?谢谢!

session.php如下:

<?php

return [
    'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => 120,
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => null,
    'table' => 'sessions',
    'lottery' => [2, 100],
    'cookie' => 'laravel_session',
    'path' => '/',
    'domain' => null,
    'secure' => false,

];

编辑1 :我发现问题出在控制器中。有一条线:

$this->middleware('csrf', [ 'on' => 'post' ]);

我评论出来并且有效。但我还没弄清楚它为什么会引起这个问题。

1 个答案:

答案 0 :(得分:0)

看看@Cas Bloem他的答案,这让我感到非常惊讶:

Laravel - Session store not set on request

这就是为什么它不适合我。因为你正在使用与CSRF令牌相匹配的会话(这是我最好的猜测,我自己也是Laravel的新手)。

此外,如果您转到app-&gt; http-&gt; middleware-&gt; VerifyCsrfToken,您可以添加路由到不会检查CSRF验证的阵列。这加上Cas Bloem他的修复(在routes.php的不同部分放置路由)解决了我的问题。我现在正在开发/学习localhost,但需要稍后实现。

希望这有助于/清除事情!