2016-01-09 1 views
6

Я только что установил Laravel 5.2. Я провел несколько часов в своем проекте, и я заметил, что сеанс не проходит по маршрутам. Я впервые заметил это при использовании службы валидации в форме. Переменная $error была пуста при ошибке проверки.Laravel 5.2 - Сессия не сохраняется при изменении маршрута

Я создал два простых маршрута для воспроизведения проблемы. Код ниже. Foo маршрут загружает сеанс, но Bar маршрут нет.

  • Laravel.log пусто.
  • sudo chmod -R 777 установка на хранение
  • Я пробовал драйвер базы данных и драйвер файла. Тот же результат.
  • Я обновил базу данных, включив в него изменения сеансов таблицы (идентификатор пользователя и т.д.)
  • php artisan cache:clear
  • php artisan config:clear
  • При использовании драйвера файла я вижу сеансовые файлы хранятся в storage/framework/sessions
  • у меня есть свежая копия app/Http/Kernel.php взята из 5.2 хранилища

routes.php

Route::group(['middleware' => ['web']], function() { 


    Route::get('foo','[email protected]'); 
    Route::get('bar','[email protected]'); 


}); 

AuthController.php

namespace Zocial\Http\Controllers; 

class AuthController extends Controller 
{ 

public function foo() 
{ 
    \Session::put('user','testing'); 

    //session(['user' => 'testing']); not working either 
    return \Session::get('user'); 
} 

public function bar() 
{ 
    return "Session here: " . \Session::get('user'); 
} 

} 

Config/session.php

return [ 

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

]; 
+0

При использовании драйвера файла вы видите, что файлы сеанса создаются в каталоге 'storage/framework/sessions'? –

+0

Установили ли вы новое приложение Laravel 5.2 или сделали обновление с предыдущей версии? –

+1

Не могли бы вы убедиться, что у вас есть действительная структура файлов app/Http/Kernel.php? По умолчанию один находится здесь https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php –

ответ

0

Можете ли вы попробовать это?

public function foo(Request $request) 
{ 
    $value = $request->session()->put('key', 'value'); 

} 

public function bar(Request $request) 
{ 
    $value = $request->session()->get('key'); 
    return $value; 
} 
+0

Конечно. Я считаю, что ваш первый метод должен быть «foo». Поэтому я обновил ваш код до этого. Я получаю те же результаты, что и в моем примере. Сессия не возвращается. – stephenthedev

+0

какой сеанс драйвера вы используете, когда вы это пробовали? – ssuhat

+0

Я пробовал это с помощью драйвера File. – stephenthedev

0

Если вы используете Auth по умолчанию, который включается в 5.2, а затем попытаться сделать это:

php artisan make:auth 

Это обновит ваш контроллер аутентификации и все остальное, что приходит со стандартом Идента, что Laravel 5.2.

Это единственное, что помогло мне. (Он перестал работать после того, как я поставил сеансы базы данных ...)


Update 1

Видимо это регистрирует вас из приложения и дает лексемы несоответствие, когда у вас есть маршрут определенный в вашем routes.php, который использует «сетевое» промежуточное программное обеспечение.

Как это: (берегитесь код ниже НЕ работает)

Route::auth(); 

Route::get('/home', '[email protected]'); 


Route::group(['middleware' => 'web'], function() { 
    Route::get('/', function() { 
     return view('welcome'); 
    }); 
}); 

Переход к корню журналов сайта вам, когда вы в/домой, вы будете перенаправлены на входе в систему. Если вы попытаетесь снова войти в систему, это даст вам несоответствие токенов.

Следующая остановил ошибку появляться:

Route::auth(); 

Route::get('/home', '[email protected]'); 

Route::get('/', function() { 
    return view('welcome'); 
}); 

Либо я не понимаю нового промежуточного материала, или его не работает, так как мой маршрут для «/» следует использовать веб-промежуточное программное обеспечение или я не прав ?


Решение: Вы должны удалить веб межплатформенного от ваших маршрута/групп маршрутов, так как веб промежуточного слой добавляются автоматически, так как 5.2, вот что было causeing проблемы для меня тоже.

0

Я заметил, что сеансы не сохраняются, если для «secure» установлено значение true в config/session.php, и вы не получаете доступ к вашему сайту через HTTPS. Я решил это, установив «secure» в false.