HTTPセッションイントロダクションHTTP駆動のアプリケーションはステートレスのため、リクエスト間に渡りユーザーに関する情報を保存するセッションが提供されています。Laravelは記述的で統一されたAPIを使える様々なバックエンドのセッションを用意しています。人気のあるMemcachedやRedis、データベースも始めからサポートしています。設定セッションの設定はconfig/session.phpにあります。このファイルのオプションには詳しくコメントがついていますので確認して下さい。ほとんどのアプリケーションでうまく動作できるように、Laravelはfileセッションドライバをデフォルトとして設定しています。実働環境のアプリケーションではセッションの動作をより早くするために、memcachedやredisドライバの使用を考慮しましょう。セッションドライバ(driver)はリクエスト毎のセッションデータをどこに保存するかを決めます。Laravelには最初から素晴らしいドライバが用意されています。セッションはstorage/framework/sessionsに保存されます。セッションは暗号化され安全なクッキーに保存されます。セッションはリレーショナルデータベースへ保存されます。セッションはスピードの早いキャッシュベースの保存域に保存されます。セッションはPHPの配列として保存されるだけで、リクエスト間で継続しません。セッションデータを持続させないため、arrayドライバは通常テスト時に使用します。ドライバの事前要件データベースdatabaseセッションドライバを使う場合、セッションアイテムを含むテーブルを作成する必要があります。以下にこのテーブル宣言のサンプル「スキーマ」を示します。Artisanコマンドを使えば、このマイグレーションが生成できます。migrateRedisRedisセッションをLaravelで使用する前に、Composerでpredis/predisパッケージ(~1.0)をインストールする必要があります。Redis接続はdatabase設定ファイルで設定します。session設定ファイルでは、connectionオプションで、どのRedis接続をセッションで使用するか指定します。セッションの使用データ取得Laravelでセッションを操作するには、主に2つの方法があります。グローバルなsessionヘルパを使用する方法と、コントローラメソッドにタイプヒントで指定できるRequestインスタンスを経由する方法です。最初はRequestインスタンスを経由する方法を見てみましょう。コントローラのメソッドに指定した依存インスタンスは、Laravelのサービスコンテナにより、自動的に注入されることを覚えておきましょう。}}getメソッドでセッションから値を取り出すとき、第2引数にデフォルト値も指定できます。このデフォルト値は、セッションに指定したキーが存在していなかった場合に、返されます。getメソッドのデフォルト値に「クロージャ」を渡した場合に、要求したキーが存在しなければ、その「クロージャ」が実行され、結果が返されます。PHP関数で、セッションからデータを出し入れすることもできます。sessionヘルパが文字列ひとつだけで呼び出されると、そのセッションキーに対する値を返します。ヘルパがキー/値ペアの配列で呼び出されると、それらの値はセッションへ保存されます。セッションをHTTPリクエストインスタンスを経由する場合と、グローバルなsessionヘルパを使用する場合では、実践上の違いがあります。どんなテストケースであろうとも使用可能な、assertSessionHasメソッドを利用して、どちらの手法もテスト可能です。全セッションデータの取得セッション中の全データを取得する場合は、allメソッドを使います。$request->session()->all();セッション中のアイテム存在を確認セッションへ値が存在するか調べたい場合は、hasメソッドを使います。その値が存在し、nullでない場合はtrueが返ります。//}セッション中に、たとえ値がnullであろうとも存在していることを確認したい場合は、existsメソッドを使います。existsメソッドは、値が存在していればtrueを返します。//}データ保存セッションへデータを保存する場合、通常putメソッドか、sessionヘルパを使用します。'value']);配列セッション値の追加pushメソッドは新しい値を配列のセッション値へ追加します。user.teamsキーにチーム名の配列が含まれているなら、新しい値を次のように追加できます。'developers');取得後アイテムを削除pullメソッド一つで、セッションからアイテムを取得後、削除できます。'default');フラッシュデータ次のリクエスト間だけセッションにアイテムを保存したいことは良くあります。flashメソッドを使ってください。flashメソッドは直後のHTTPリクエストの間だけセッションにデータを保存します。それ以降は削除されます。フラッシュデータは主にステータスメッセージなど継続しない情報に便利です。successful!');フラッシュデータをその先のリクエストまで持続させたい場合は、reflashメソッドを使い、全フラッシュデータを次のリクエストまで持続させられます。特定のフラッシュデータのみ持続させたい場合は、keepメソッドを使います。'email']);データ削除forgetメソッドでセッションからデータを削除できます。セッションから全データを削除したければ、flushメソッドが使用できます。fixation攻撃を防ぐために行います。Laravelに組み込まれているLoginControllerを使用していれば、認証中にセッションIDは自動的に再生成されます。セッションIDを任意に再生成する必要があるのでしたら、regenerateメソッドを使ってください。$request->session()->regenerate();カスタムセッションドライバの追加ドライバの実装カスタムセッションドライバでは、SessionHandlerInterfaceを実装してください。このインターフェイスには実装する必要のある、シンプルなメソッドが数個含まれています。MongoDBの実装をスタブしてみると、次のようになります。した拡張を含むディレクトリをLaravelでは用意していません。お好きな場所に設置してください。上記の例では、Extensionディレクトリを作成し、MongoSessionHandlerファイルを設置しています。これらのメソッドの目的を読んだだけでは理解しづらいため、それぞれのメソッドを簡単に見てみましょう。openメソッドは通常ファイルベースのセッション保存システムで使われます。Laravelはfileセッションドライバを用意していますが、皆さんはこのメソッドに何も入れる必要はないでしょう。空のスタブのままで良いでしょう。実際、PHPが実装するように要求しているこのメソッドは、下手なインターフェイスデザインなのです。closeメソッドもopenと同様に通常は無視できます。んどのドライバでは必要ありません。readメソッドは指定された$sessionIdと紐付いたセッションデータの文字列バージョンを返します。取得や保存時にドライバ中でデータをシリアライズしたり、他のエンコード作業を行ったりする必要はありません。Laravelがシリアライズを行います。writeメソッドはMongoDBやDynamoなどの持続可能なストレージに、$sessionIdに紐付け指定した$data文字列を書き出します。ここでも、シリアリズを行う必要は全くありません。Laravelが既に処理しています。destroyメソッドは持続可能なストレージから$sessionIdに紐付いたデータを取り除きます。gcメソッドは指定したUNIXタイムスタンプの$lifetimeよりも古い前セッションデータを削除します。自前で破棄するMemcachedやRedisのようなシステムでは、このメソッドは空のままにしておきます。ドライバの登録ドライバを実装したら、フレームワークへ登録する準備が整いました。Laravelのセッションバックエンドへドライバを追加するには、Sessionファサードのextendメソッドを呼び出します。サービスプロバイダのbootメソッドから、extendメソッドを呼び出してください。既存のAppServiceProviderか真新しく作成し、呼び出してください。}}セッションドライバを登録したら、config/session.php設定ファイルでmongoドライバが使用できます。2018.ドキュメントメンテナンス期間は終了しました。注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。閉じる移動クリックで即時移動します。適用ボタンクリック後に、全項目まとめて適用されます。Scaffoldスカフォールド型枠生成スカフィールドLargeスクリーン表示幅640px80%90%100%インデントなし1rem2rem3rem本文フォントコードフォントフォント適用確認フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。バックスラッシュを含むインライン\Code\Blockの例です。以下はコードブロックの例です。}}設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。