返回视图时,laravel会话未持久 [英] laravel session not persisting when view returned
问题描述
我正在构建具有Web和api路由的laravel应用程序.我想存储路线之间的会话.如果我将其存储为会话而没有返回视图,则可以正常工作.但是当我返回视图时,我的会话不再存在.
I am building a laravel application where I have web and api routes. I want to store sessions between my routes. If i store as session without returning a view, it works fine. But when i return a view my session no longer exists.
我的web.php如下:
My web.php is as follows:
Route::get('/', 'ViewController@index');
Route::get('/check', 'ViewController@check');
我的控制器
public function index(Request $request)
{
$request->session()->put('test','123456');
$request->session()->save();
//echo $request->session()->get('test', 'default_value');
// return view('welcome'); //If I uncomment this the sessions are not working anymore.
}
public function check(Request $request)
{
echo $request->session()->get('test', 'default_value');
var_dump($request->session()->all());
//return view('welcome');
}
也许有事情要做,我也将会话存储在api控制器的api路由中.我的api.php:
Maybe it has something to do that i also store sessions in my api routes in the api controllers. My api.php:
Route::group(['middleware' => ['web']], function () {
//board
Route::get('/board/create', 'BoardController@create');
Route::post('board/{id}/guess', 'BoardController@guessWord');
Route::get('/board/set', 'BoardController@set');
Route::get('/board/get', 'BoardController@get');
//user
Route::get('/user', 'UserController@get');
Route::post('/user/create', 'UserController@create');
});
kernel.php
kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
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,
];
/**
* The application's route middleware groups.
*
* @var array
*/
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',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
谢谢!
推荐答案
来自文档 api路由不使用 StartSession
中间件,因为会话仅在 web 组中间件中可用
From the docs api routes does not use StartSession
middleware because session is only available in web group of middlewares
因此,仅将会话存储在网络路由中
So store session only in web routes
这篇关于返回视图时,laravel会话未持久的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!