Laravelでsession(セッション)を扱う方法【初心者向け】

初心者向けにLaravelでsession(セッション)を扱う方法について解説しています。フレームワークからsessionを管理する方法を学びましょう。ユーザーごとのデータを保存する上で必要な処理なので、使い方を理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Laravelでsessionを扱う方法について解説します。

Webアプリケーションを開発する上で欠かせない知識になるので、使い方を理解しておきましょう。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、Laravelに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Laravelでsessionを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

sessionとは

Webアプリケーションでは、リクエストをまたがったユーザーの識別やユーザー毎のデータの保存を行う必要が出てきます。
そのために、Laravelのようなフレームワークは、セッションという仕組みを提供しています。

セッションにはデータ(キーと値のペア)を保存できます。

Laravelは様々なバックエンドのセッションを提供しており、config/session.phpで設定できます。

デフォルトで設定されているfileセッションは、storage/framework/sessions/ディレクトリ内のファイルにセッションを保存します。実稼働環境ではdatabaseセッションやredisセッションなどの使用を考慮しますが、開発環境ではデフォルトのfileセッションで十分です。

 

Laravelでsessionを利用する方法

Laravelでセッションを操作するには、主に2つの方法があります。使い方は似ています。

一つはアクションに渡されるRequestインスタンスを経由する方法です。
Illuminate\Session\Storeインスタンスが使われます。

// 指定したデータをセッションから取得する
// キーが存在していない場合に返すデフォルト値を第2引数に指定できる
$value = $request->session()->get('key’);
$value = $request->session()->get('key', 'default’);
$value = $request->session()->get('key', function () {
    return 'default';
});

// セッション中の全データを取得する
$data = $request->session()->all();

// 指定したデータがセッションに存在するかを調べる
if ($request->session()->exists('key')) {
    // 存在する
}
if ($request->session()->has('key')) {
    // 存在しnullではない
}

// セッションへデータを保存する
$request->session()->put('key', 'value');
$request->session()->put(['key1' => 'value1', 'key2' => ‘value2']);

// 指定したデータをセッションから取得後、そのデータを削除する
$value = $request->session()->pull('key', 'default’);

// 指定したデータをセッションから削除する
$request->session()->forget('key');

// セッションから全データを削除する
$request->session()->flush();

もう一つはグローバルなヘルパ関数session( )を使用する方法です。
Illuminate\Session\SessionManagerインスタンスが使われます。

// 指定したデータをセッションから取得する
// キーが存在していない場合に返すデフォルト値を第2引数に指定できる
$value = session('key’);
$value = session('key', 'default');
$value = session('key', function () {
    return 'default';
});
$value = session()->get(‘key');
$value = session()->get('key', 'default');
$value = session()->get('key', function () {
    return 'default';
});

// セッション中の全データを取得する
$data = session()->all();

// 指定したデータがセッションに存在するかを調べる
if (session()->exists('key')) {
    // 存在する
}
if (session()->has('key')) {
    // 存在しnullではない
}

// セッションへデータを保存する
session(['key1' => 'value1', 'key2' => ‘value2']);
session()->put(['key1' => 'value1', 'key2' => 'value2']);

// 指定したデータをセッションから取得後、そのデータを削除する
$value = session()->pull('key', 'default’);

// 指定したデータをセッションから削除する
session()->forget('key');

// セッションから全データを削除する
session()->flush();

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際にLaravelでsessionを使ってみよう

ごく簡単な例で、リクエストをまたいでデータが保存されることを確認してみましょう。

以下のようなルートを定義します。

routes/web.php

Route::get('/put-data', function () {
    session()->put(['email' => 'user@example.com']);
    return session()->get('email');
});

Route::get(‘/list-data', function () {
    return session()->all();
});

まず、ブラウザで /put-dataにアクセスすると1つ目のルートが実行され、セッションにデータが保存されたことを確認できます。

user@example.com

次に、ブラウザで /list-data にアクセスすると2つ目のルートが実行され、先ほど保存されたデータが残っていることを確認できます。

{"email":"user@example.com","_previous":{"url":"http:\/\/localhost:8000\/put-data"},"_flash":{"old":[],"new":[]},"_token":"UYcsteOQAj58e9Aay5uNc3V4F0fSpi9VfEBlKhTZ"}

他にもデータがありますが、これらは自動的に保存されたデータです。Laravel自体もセッションを利用していることがわかります。

この記事を監修してくれた方

杉本 隆也(すぎもとたかや)
フリーランスのアプリケーションエンジニア。

WebアプリやiOSアプリの受託開発をしながら、
TechAcademyではPHP/Laravelコースを担当しています。

開発実績: マッチングサービス、カスタマーサービス、決済ツール、SNSアプリ、音遊びアプリなど。
趣味: 二胡(を始めたい)

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。