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 - Lumen 5.1 - PHP Micro-Framework By Laravel
- HTTP Session - Laravel 5.6- The PHP Framework For Web Artisans
- Laravel Unwrapped: Session, Auth and Cache, laravel 4기준의 이야기. 하지만 전체적인 파악을 하는데 도움이 된다.
당연한 이야기지만 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
- laravel - How can I use Illuminate\Session\Middleware\StartSession::class on lumen 5.2 - Stack Overflow
- laravel - Enabling session in lumen framework - Stack Overflow
- What's the best way to start the session manually?
- No longer works with Lumen 5.2 · Issue #23 · esbenp/lumen-api-oauth · GitHub
댓글 없음:
댓글 쓰기