My Laravel 5.2.10 As sessões não persistirão

Eu tenho uma nova instalação do Laravel 5, na verdade, tentei isso em várias versões e continuo atingindo o mesmo problema.

Não alterei nada do padrão, exceto configurando o driver de session para redis. (O arquivo baseado também tem o mesmo problema).

Tenho duas rotas definidas da seguinte forma

Route::get('/set/{value}', function($value) { var_dump(Session::getId()); Session::set('test', $value); return view('welcome'); }); Route::get('/get', function() { return 'Get ' . Session::get('test'); }); 

Se eu visitar o url / set / abc, vejo a session aparecer no REDIS (eu também vejo o arquivo criado ao usar o arquivo baseado). A session parece bem no REDIS como mostrado abaixo

 127.0.0.1:6379> KEYS * 1) "laravel:1a3ae6caff6346e4a173fdc1ab4c6eb0f138806b" 2) "laravel:fed1af2fb44c6e625953237c3fa6fcbb05366a5c" 3) "laravel:cb37286ccfe3e7caa20557aca840f50cb5a5f20d" 

Toda vez que eu visitar a página, ele recria uma nova session.

As partes principais do arquivo session.php são as seguintes:

 'lifetime' => 120, 'expire_on_close' => false, 

Eu também verifiquei no REDIS o TTL das variables ​​da session e eles são inicializados em 120 minutos (equivalente em segundos).

Alguma idéia do que estou fazendo de errado?

Pode valer a pena notar que estou usando um homen vm (completamente estoque) para testar isso. Também tentei usar vários navegadores. Nenhum cookie já foi enviado para o navegador. Presumo que um ID de session seja enviado ao navegador como parte da solicitação de obtenção inicial?

A class middleware do Laravel \Illuminate\Session\Middleware\StartSession é responsável por iniciar sua session. Antes da L5.2, isso funcionou em todos os pedidos porque fazia parte da pilha de middleware global. Agora, é opcional porque a L5.2 quer permitir uma UI da web e uma API dentro da mesma aplicação.

Se você abrir o app/Http/Kernel.php , você verá que o middleware do StartSession faz parte de um grupo de middleware chamado web . Você precisa colocar todas as suas rotas lá dentro para que seu exemplo funcione.

 Route::group(['middleware' => ['web']], function () { Route::get('/set/{value}', function($value) { var_dump(Session::getId()); Session::set('test', $value); return view('welcome'); }); Route::get('/get', function() { return 'Get ' . Session::get('test'); }); }); 

Você pode ver que o grupo de middleware da web também é responsável por outras coisas, como fornecer a variável $errors em todas as visualizações.

Você pode ler mais sobre isso nos documentos:

Por padrão, o arquivo routes.php contém uma única rota, bem como um grupo de rotas que aplica o grupo de middleware da web a todas as rotas que contém. Este grupo de middleware fornece estado de session e proteção CSRF para rotas.

Quaisquer rotas não colocadas no grupo de middleware da web não terão access a sessões e proteção CSRF, portanto, certifique-se de que todas as rotas que precisam desses resources sejam colocadas dentro do grupo. Normalmente, você colocará a maioria de suas rotas dentro deste grupo:

Fonte: https://laravel.com/docs/5.2/routing