HTTP 駆動のアプリケーションはステートレスであるため、ユーザーのリクエスト情報を保存するために Session を使用します。 Laravel は、クリーンで統合された API を通じてさまざまなバックエンド セッション ドライバーを処理します。現在サポートされている人気のバックエンド ドライバーには、Memcached、Redis、データベースなどがあります。
1.1 設定
セッション設定ファイルは config/session.php にあります。デフォルトでは、Laravel で使用されるセッションドライバーはファイル駆動型であり、多くのアプリケーションでは問題ありません。実稼働環境では、セッションのパフォーマンスを高速化するために、memcached ドライバーまたは redis ドライバーの使用を検討できます。
セッションドライバーは、リクエストされたセッションデータが保存される場所を定義します。安全な Cookie で暗号化されます。
データベース
データベースセッションドライバーを使用する場合、セッション項目を含めるようにテーブルを設定する必要があります。 以下は、データテーブルのテーブル構造宣言です。Schema::create('sessions', function ($table) { $table->string('id')->unique(); $table->text('payload'); $table->integer('last_activity');});
を使用できます。移行を生成する Artisan コマンド session:table :
php artisan session:tablecomposer dump-autoloadphp artisan migrate
Redis
Laravel で Redis セッションドライバーを使用する前に、Composer を通じて predis/predis パッケージをインストールする必要があります。
1.3 その他のセッション関連の問題
Laravel フレームワークは内部で flashsession キーを使用するため、この名前でセッションにデータ項目を追加しないでください。
保存されているすべてのセッション データを暗号化する必要がある場合は、構成ファイルで暗号化構成を true に設定します。
2. 基本的な使用法
セッションへのアクセス
まず、コントローラー メソッドのタイプ ヒントを通じてセッション インスタンスにアクセスできます。 Laravel サービスコンテナインジェクション:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * 显示指定用户的属性 * * @param Request $request * @param int $id * @return Response */ public function showProfile(Request $request, $id) { $value = $request->session()->get('key'); // }}
$value = $request->session()->get('key', 'default');$value = $request->session()->get('key', function() { return 'default';});
$data = $request->session()->all();
Route::get('home', function () { // 从session中获取数据... $value = session('key'); // 存储数据到session... session(['key' => 'value']);});
has メソッドを使用して、データ項目がセッション内に存在するかどうかを確認できます。存在する場合は true を返します:
if ($request->session()->has('users')) { //}
セッション インスタンスを取得した後、複数のメソッドを呼び出して基になるデータを操作できます。たとえば、put メソッドは新しいデータをセッションに保存します。
$request->session()->put('key', 'value');
Push メソッドを使用すると、値が配列であるセッションにデータをプッシュできます。たとえば、user.teams キーにチーム名の配列が含まれている場合、新しい値を配列は次のようになります。
$request->session()->push('user.teams', 'developers');
pull メソッドはセッションからデータを取得して削除します。
$value = $request->session()->pull('key', 'default');
場合、forget メソッドは指定されたデータをセッションから削除します。セッションからすべてのデータを削除したい場合は、フラッシュ メソッドを使用できます:
$request->session()->forget('key');$request->session()->flush();
セッション ID を再生成する必要がある場合は、regenerate メソッドを使用できます:
$request->session()->regenerate();
場合によっては次のリクエストでのみ有効なデータをセッションに保存したい場合があります。これはフラッシュ メソッドを使用して実現できます。このメソッドを使用して保存されたセッション データは、後続の HTTP リクエストでのみ有効であり、その後削除されます:
$request->session()->flash('status', 'Task was successful!');
$request->session()->reflash();$request->session()->keep(['username', 'email']);
3. カスタム セッション ドライバーを追加します
Laravel バックエンドセッションでは、セッションファサードで extend メソッドを使用できます。このメソッドは、サービス プロバイダーのブート メソッドで呼び出すことができます:
<?phpnamespace App\Providers;use Session;use App\Extensions\MongoSessionStore;use Illuminate\Support\ServiceProvider;class SessionServiceProvider extends ServiceProvider{ /** * Perform post-registration booting of services. * * @return void */ public function boot() { Session::extend('mongo', function($app) { // Return implementation of SessionHandlerInterface... return new MongoSessionStore; }); } /** * Register bindings in the container. * * @return void */ public function register() { // }}
<?phpnamespace App\Extensions;class MongoHandler implements SessionHandlerInterface{ public function open($savePath, $sessionName) {} public function close() {} public function read($sessionId) {} public function write($sessionId, $data) {} public function destroy($sessionId) {} public function gc($lifetime) {}}
セッションドライバーが登録されると、構成ファイル config/session.php で mongo ドライバーを使用できるようになります。