laravel 5.5 会话未在 Web 中间件中启动
laravel 5.5 session is not starting in web middleware
这是我在使用 dd(session())
时得到的数组。
SessionManager {#551 ▼
#app: Application {#5 ▶}
#customCreators: []
#drivers: array:1 [▼
"file" => Store {#553 ▼
#id: "Kg81ge6ve7bPg4Vos5qsKqvU3Bmo2k6U0hQncxY1"
#name: "project_session"
#attributes: array:1 [▶]
#handler: FileSessionHandler {#552 ▶}
#started: false
}
]
}
它与 auth 中间件一起工作正常。
SessionManager {#739 ▼
#app: Application {#5 ▶}
#customCreators: []
#drivers: array:1 [▼
"file" => Store {#742 ▼
#id: "3nTG8ApjScmeivyKtwDw1nsfOQ9hK8lrwkbLJfTa"
#name: "project_session"
#attributes: array:5 [▶]
#handler: FileSessionHandler {#741 ▶}
#started: true
}
]
}
我正在建立客户登录的网站。我试图通过会话访问货币,它在用户登录时设置。但是当我尝试在会话中设置它时,它没有设置。
当我查看会话文件夹时,每个新请求都有新文件。
希望有人经历过这个。因为我找了很多,也没有找到任何东西。提前致谢。
这是我的 kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
这是我的 routes.php
<?php
Route::group(['middleware' => ['web']], function(){
Route::get('/', 'Front\HomeController@index');
Route::get('/blog','Front\BlogController@index');
Route::get('/blog/{slug}','Front\BlogController@show');
Route::get('/{slug}','Front\PageController@show');
});
//Routes For Customer panel
Auth::routes();
Route::get('/customer/home', 'Customer\HomeController@index')->name('home');
Route::group( ['middleware' => ['auth'], 'prefix' => 'customer'], function(){
Route::resource('products','Customer\ProductController');
Route::resource('categories','Customer\CategoryController');
Route::resource('posts','Customer\PostController');
Route::resource('pages','Customer\PageController');
Route::resource('packages','Customer\PackageController');
Route::resource('clients','Customer\ClientController');
Route::resource('faqs','Customer\FaqController');
Route::resource('testimonials','Customer\TestimonialController');
Route::resource('blogs','Customer\BlogController');
Route::resource('currencies','Customer\CurrencyController');
});
我试图从路由中删除网络中间件,因为有人建议网络中间件会自动设置为路由。因此,如果您添加网络中间件,那么您可以获得路由作为 'web, web' 中间件,但是当我使用 php artisan route:list 获取路由时,它只给我网络中间件。
我不知道会话启动是如何工作的,有没有我可以添加到某个地方的方法,以便我可以启动会话。
因为您的会话中间件插入到网络组中间件中,所以 运行 只是在网络组中间件中。
你应该像这样替换它们并插入到中间件中:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
**\Illuminate\Session\Middleware\StartSession::class,// insert here
\Illuminate\View\Middleware\ShareErrorsFromSession::class // insert here**
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
**\Illuminate\Session\Middleware\StartSession::class,// remove this**
// \Illuminate\Session\Middleware\AuthenticateSession::class,
**\Illuminate\View\Middleware\ShareErrorsFromSession::class // remove this**
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
这是我在使用 dd(session())
时得到的数组。
SessionManager {#551 ▼
#app: Application {#5 ▶}
#customCreators: []
#drivers: array:1 [▼
"file" => Store {#553 ▼
#id: "Kg81ge6ve7bPg4Vos5qsKqvU3Bmo2k6U0hQncxY1"
#name: "project_session"
#attributes: array:1 [▶]
#handler: FileSessionHandler {#552 ▶}
#started: false
}
]
}
它与 auth 中间件一起工作正常。
SessionManager {#739 ▼
#app: Application {#5 ▶}
#customCreators: []
#drivers: array:1 [▼
"file" => Store {#742 ▼
#id: "3nTG8ApjScmeivyKtwDw1nsfOQ9hK8lrwkbLJfTa"
#name: "project_session"
#attributes: array:5 [▶]
#handler: FileSessionHandler {#741 ▶}
#started: true
}
]
}
我正在建立客户登录的网站。我试图通过会话访问货币,它在用户登录时设置。但是当我尝试在会话中设置它时,它没有设置。 当我查看会话文件夹时,每个新请求都有新文件。
希望有人经历过这个。因为我找了很多,也没有找到任何东西。提前致谢。
这是我的 kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
这是我的 routes.php
<?php
Route::group(['middleware' => ['web']], function(){
Route::get('/', 'Front\HomeController@index');
Route::get('/blog','Front\BlogController@index');
Route::get('/blog/{slug}','Front\BlogController@show');
Route::get('/{slug}','Front\PageController@show');
});
//Routes For Customer panel
Auth::routes();
Route::get('/customer/home', 'Customer\HomeController@index')->name('home');
Route::group( ['middleware' => ['auth'], 'prefix' => 'customer'], function(){
Route::resource('products','Customer\ProductController');
Route::resource('categories','Customer\CategoryController');
Route::resource('posts','Customer\PostController');
Route::resource('pages','Customer\PageController');
Route::resource('packages','Customer\PackageController');
Route::resource('clients','Customer\ClientController');
Route::resource('faqs','Customer\FaqController');
Route::resource('testimonials','Customer\TestimonialController');
Route::resource('blogs','Customer\BlogController');
Route::resource('currencies','Customer\CurrencyController');
});
我试图从路由中删除网络中间件,因为有人建议网络中间件会自动设置为路由。因此,如果您添加网络中间件,那么您可以获得路由作为 'web, web' 中间件,但是当我使用 php artisan route:list 获取路由时,它只给我网络中间件。
我不知道会话启动是如何工作的,有没有我可以添加到某个地方的方法,以便我可以启动会话。
因为您的会话中间件插入到网络组中间件中,所以 运行 只是在网络组中间件中。 你应该像这样替换它们并插入到中间件中:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
**\Illuminate\Session\Middleware\StartSession::class,// insert here
\Illuminate\View\Middleware\ShareErrorsFromSession::class // insert here**
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
**\Illuminate\Session\Middleware\StartSession::class,// remove this**
// \Illuminate\Session\Middleware\AuthenticateSession::class,
**\Illuminate\View\Middleware\ShareErrorsFromSession::class // remove this**
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];