PCS開発チーム

PCS開発チーム

AWS Lambdaのペイロードサイズ制限でSession(databaseドライバー)への保存が失敗する例

  • Laravel 11.x
  • SESSION_DRIVER=database
  • VaporやVercelなどのLambda環境
  • データベースはRDS

なにかのクラスをそのままセッションに保存しようとすると

$large_object = new LargeObject();
session()->put('test', $large_object);
return redirect('/');

書き込みできてなくて読み出せない。

// 別のルート
dump(session()->get('test'));
// null

「EC2では発生しない」「VaporでもVercelでも同じく発生」なので原因はLambdaと予想。
そんなに大きなクラスではないはずだけど保存時にserialize()base64_encode()してるので想定より大きくなってるのかも。
Lambdaだとこれ以上調査しにくいのでLambdaからデータベースへの書き込みで失敗していることだけ確定できればいい。

対策

配列で保存すれば成功する。

session()->put('test', []);