Просто простая функция в родном php
protected function some_function(){ session_start(); if(!isset($_SESSION['a'])) { $_SESSION['a'] = 'some value'; return true; } else { return $_SESSION['a']; } }
на первом запуске он вернет bool (true), а затем "some value"
как ожидалось.
Применяя это к сеансу laravel,
protected function some_function(){ $a = Session::get('abc'); if(is_null($a)){ Session::put('abc', 'some value'); //return Session::get('abc'); return true; } else { return $a; } }
По логике, в первом прогоне $ a будет null
. а затем помещает "some value"
в ключ abc
и возвращает bool (true), как ожидалось.
Однако при последующем доступе Session::get('abc')
возвращает null каждый раз. поэтому каждая попытка возвращает bool (true).
Я предположил, что сеанс не записывался должным образом, поэтому я проверил с получением значения ключа сразу после его установки.
комментируя строку в приведенном выше коде, он возвращает любое значение, которое я положил в Session::put('abc')
. Таким образом, при записи данных ошибки не возникает.
Проблема здесь в попытке получить значение всегда возвращает значение null
хотя я установил после первого запроса.
Я что-то пропустил?
Использование базы данных в качестве драйвера, сеансы не сохраняются в базе данных. Ошибка не выводится. Реализация базы данных была правильной с помощью схемы таблиц сеансов, как описано в документах.
Попробуйте этот фрагмент. Непроверенный, но уверен, что он работает.
if(Session::has('abc')) { return Session::get('abc'); } else { Session::put('abc', 'some value'); return true; }
Пройдя через многие форумы, чтобы решить ту же проблему, я решил ее, установив мой драйвер сеанса в базу данных.
'driver' => 'database',
и созданная таблица в базе данных
CREATE TABLE `sessions` ( `id` varchar(40) NOT NULL, `last_activity` int(10) NOT NULL, `data` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;