LaravelでクッキーにセッションIDを書き込む方法は、通常のセッション設定を
調整することで可能です。
Laravelはデフォルトでセッション情報をクッキーに保存する機能を備えているので、
設定を少し変更するだけでクッキーにセッションIDを保存できます。
以下の手順で進めてみましょう。
但し、Laravelはデフォルトでlaravel_sessionというcookies名のクッキーを
最初から持ってますので、別途にセッションを使いたい場合に下記の手順で
作成します。新しく作られた場合でも、デフォルトのlaravel_sessionクッキーは
残ります。
1. セッションドライバーの設定
Laravelのセッションは、デフォルトでファイル(file)ドライバーを使用しています。
クッキーに直接セッションを保存したい場合は、セッションドライバーを「cookie」に変更する
必要があります。
config/session.phpファイルを開きます。driverの設定を変更します。
'driver' => 'cookie',
この設定により、セッションデータがクッキーに直接保存されるようになります。
2. セッションIDを含むクッキーを設定
もしもクッキーに「セッションIDのみ」を保存したい場合、セッションドライバーは
デフォルトのfile、またはdatabaseのままにしておき、セッションIDをクッキーに
書き込むように追加の処理を実装できます。
ミドルウェアでセッションIDを書き込む方法
- 新しいミドルウェアを作成します。
php artisan make:middleware SessionIdToCookie
- 作成されたミドルウェアファイル(
app/Http/Middleware/SessionIdToCookie.php)
を編集して、セッションIDをクッキーに書き込む処理を追加します。
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Session;
class SessionIdToCookie
{
public function handle($request, Closure $next)
{
// リクエスト処理
$response = $next($request);
// セッションが利用可能な場合にのみセッションIDをクッキーに保存
if (Session::has('_token')) {
$sessionId = Session::getId(); //セッションIDを作成
//session_idという名前のクッキーにセッションIDを保存
// クッキーの有効期限は120分に設定
$response->cookie('session_id', $sessionId, 120);
}
return $response;
}
}
app/Http/Kernel.phpにミドルウェアを登録します。
protected $middleware = [
// 他のミドルウェア
\App\Http\Middleware\SessionIdToCookie::class,
];
これで、session_idという名前のクッキーにセッションIDが保存されるようになります。
クッキーの有効期限は120分ですが、必要に応じて変更してください。
3. クッキーに書き込まれたセッションIDの確認
Laravelアプリを実行し、ブラウザの開発者ツールなどを使って、session_idクッキーが
設定されているか確認できます。
この設定により、クッキーにセッションIDが含まれるため、他の場所でクッキーを介して
セッションIDにアクセスできるようになります。

