Я расширяю провайдера сеанса, чтобы сохранить некоторые требуемые данные. Я начал редактировать AppServiceProvider's boot method
:Расширенное сеанс в L5 не сохраняется между запросами
\Session::extend('desk', function($app)
{
return new Desk();
});
Desk
класс выглядит следующим образом:
namespace App\Services;
use Illuminate\Session\ExistenceAwareInterface;
class Desk implements \SessionHandlerInterface, ExistenceAwareInterface{
/**
* The existence state of the session.
* @var bool
*/
protected $exists;
public function close()
{
return true;
}
public function destroy($session_id)
{
$session = $em->find('Session', $session_id);
$em->remove($session);
$em->flush();
return true;
}
public function gc($maxlifetime)
{
// TODO: Implement gc() method.
}
public function open($save_path, $session_id)
{
return true;
}
public function read($session_id)
{
$session = $em->find('Session', $session_id);
if ($sesion !== null){
$this->exists = true;
return $session->getPayload();
}
}
public function write($session_id, $session_data)
{
$session = $em->find('Session', $session_id);
if ($session === null){
$session = new Session($session_id, $session_data);
$em->persist($session);
}
else{
$session->setPayload($session_data);
}
$em->flush();
$this->exists = true;
}
public function setExists($value)
{
$this->exists = $value;
return $this;
}
}
После финиша реализации, я изменил сеанс конфигурации для этого:
return [
'driver' => 'desk',
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path().'/framework/sessions',
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'lote_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
Когда я загружаю страницу там это не проблема, но после успешного запроса на вход, а затем обновите страницу, сессия истекает, и пользователь снова является гостем. Я что-то пропустил?
Дополнительная информация: если я верну драйвер сессии в «файл», все будет хорошо.