[컴][웹] lumen 에서 session 사용하기



lumen 에서 session 사용하기

  • lumen version: 5.4.*

config/session.php

session.php 는 laravel 의 config 에서 관련 config를 가져와서 <lumen>/config/ 에 copy 하면된다.

그리고 이 session.php 를 load 하려면 boostrap/app.php 에 code 를 추가해야 한다.
$app->configure('session');


가능한 설정들은 아래와 같다. 자세한 사항은 config file 의 주석을 참고하자.

  • 'driver' => env('SESSION_DRIVER', 'file'),
  • 'lifetime' => env('SESSION_LIFETIME', 120),
  • 'expire_on_close' => true,
  • 'encrypt' => false,
  • 'files' => storage_path('framework/sessions'),
  • 'connection' => null,
  • 'table' => 'sessions',
  • 'store' => null,
  • 'lottery' => [2, 100],
  • 'cookie' => env(
            'SESSION_COOKIE',
            str_slug(env('APP_NAME', 'laravel'), '_').'_session'
     ),
  • 'path' => '/',
  • 'domain' => env('SESSION_DOMAIN', null),
  • 'secure' => env('SESSION_SECURE_COOKIE', false),
  • 'http_only' => true,
  • 'same_site' => null,


illuminate/session

illuminate/session 이 필요하다. 일단 설치를 해주자. 참고로 lumen 의 버전과 맞춰야 했다.
composer require illuminate/session
composer require illuminate/cookie "^5.4"


bootstrap/app.php

StartSession Middleware

bootstrap/app.php 에 middleware 를 추가해주자.
$app->middleware([
    \Illuminate\Session\Middleware\StartSession::class,
]);

SessionServiceProvider

SessionServiceProvider를 등록해주자.
$app->register(Illuminate\Session\SessionServiceProvider::class);
$app->register(Illuminate\Cookie\CookieServiceProvider::class);


binding

$app->bind(Illuminate\Session\SessionManager::class, function ($app) {
    return $app->make('session');
});

// cookie relevant
$app->bind(Illuminate\Contracts\Cookie\QueueingFactory::class, 'cookie');

위처럼 해주지 않으면 아래와 같은 exception 이 발생한다.
Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\Manager


session 폴더 권한

windows 에서는 sessions 폴더를 만들어놔야 한다. 그렇지 않으면 ErrorException in Filesystem.php 이 발생한다. linux 에서도 만들어 놔야 하는지는 모르지만, 최소한 write 권한 설정은 해줘야 할 듯 하다.
<lumen>\storage\framework\sessions

session 사용법

당연한 이야기지만 session_domain 설정이 제대로 되어 있어야 session 이 동작한다.

.env file

SESSION_DOMAIN=.example.com
APP_NAME=company_name

Controller

$session = $request->session();
$session->put('sample','hello');
echo $session->get('sample');

$allValues = $request->session()->all();
echo $allValues['_token']
// delete
$request->session()->forget('key');
$request->session()->flush();


login

참고로 SessionGuard 에만 login() 이 존재한다. 로그인을 하게 되면 user 에 맞는 session 을 set 해주게 된다.(SessionGuard::updateSession)
  • Auth::login()
  • Auth::guard('web')->login()

view




References

  1. laravel - How can I use Illuminate\Session\Middleware\StartSession::class on lumen 5.2 - Stack Overflow
  2. laravel - Enabling session in lumen framework - Stack Overflow
  3. What's the best way to start the session manually?
  4. No longer works with Lumen 5.2 · Issue #23 · esbenp/lumen-api-oauth · GitHub

댓글 없음:

댓글 쓰기