2014-10-05 2 views
2

У меня есть следующий код:Laravel сессии/хранения пустой на обновления

  echo 'First try: <br />'; 
      $input = Session::get('input'); 
      pre($input, false); 

      echo 'Second try: <br />'; 
      Session::put('input', 'test'); 
      pre(Session::get('input')); 

, который дает следующие выходные данные в первый раз он загружен:

First try: 
Second try: 
test 

Это, как ожидается, в первый раз, однако, когда я перезагружаю страницу, я получаю тот же результат. Все данные просто теряются после обновления.

Я знаю, что это не данные вспышки, но я не могу понять, почему он не хранит данные. Я использую сеансы на основе файлов и Xampp на окнах (То же самое происходит при использовании сервиса artisan).

Папка хранения доступна для записи.

Редактировать: Просто попробовал сеансы базы данных, тот же результат. И я делаю это непосредственно в файле маршрутов, поэтому нет другого кода, который может испортить его.

Предварительно функции:

function pre($data , $kill = true) 
{ 
    echo '<pre>'.print_r($data,true).'</pre>'; 
    if($kill){ 
     exit; 
} 
+3

Что делает функция 'pre'? Если он выполняет 'die' /' exit', это может привести к короткому замыканию функции хранения сеанса Laravel. – ceejayoz

+0

Хорошо, старайтесь делать это в контроллере, не убивая сценарий, плохо публикуйте результаты. Спасибо за совет. –

+0

Пожалуйста, напишите свой комментарий как ответ, чтобы я мог его принять! Спасибо! –

ответ

2

данные сеанса Laravel написана как часть процесса завершения реакции. Это по соображениям эффективности - если вы делаете десятки звонков Session::put в запросе, лучше сделать их все сразу навалом.

В результате, если не вызывать ответную реакцию с чем-то вроде View::make или Response::json или что там у вас и вместо exit или die, данные сеанса не будут записаны, как вы закорочены жизненный цикл ответа.

+0

Очень полезно! Я тестировал некоторые вещи и умирал и выкидывал выход, но задавался вопросом, почему мой сеанс все-таки перезагрузился. Благодаря! –

Смежные вопросы