icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、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インスタンスを経由する方法です。
IlluminateSessionStoreインスタンスが使われます。

// 指定したデータをセッションから取得する
// キーが存在していない場合に返すデフォルト値を第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( )を使用する方法です。
IlluminateSessionSessionManagerインスタンスが使われます。

// 指定したデータをセッションから取得する
// キーが存在していない場合に返すデフォルト値を第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を学んで未経験からWebエンジニアを目指す方法とは

実際に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を使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。