ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 基本チュートリアル -- セッション
HTTP ドライバーはステートレス プロトコルであるため、これは通常、サーバーが現在の要求ユーザーと以前の要求ユーザーの関係を明確に認識していないことを意味し、セッションはこの相互要求ユーザー ソリューションを提供します。 。 Laravel には、さまざまなバックエンド セッション ドライバーをサポートするためのシンプルで統合された API が付属しています。 Laravel は、Memcached、Redis、データベースなどの一般的なバックエンド ドライバーに対するすぐに使用できるサポートを提供します。
セッション設定ファイルは config/session.php に保存されます。このファイルを使用する前に、このファイル内の構成項目のコメントを必ず読んでください。 Laravel は、構成内のすべての項目に詳細な注釈を提供します。デフォルトでは、Laravel はファイルセッションドライバーを使用するように構成されており、ほとんどのアプリケーションにはこれで十分です。ただし、運用環境では、memcached や redis などのメモリ レベルのドライバーを使用することをお勧めします。これにより、アプリケーションのセッション パフォーマンスが大幅に向上します。
各リクエストのセッション データは、定義したセッション ドライバーの場所に保存されます。次のドライバーは、laravel でそのまま使用できます:
注: アレイ ドライバーは通常、永続的なセッション データを回避するためのテストに使用されます。
データベース
データベース セッション ドライバーを使用する場合は、まずセッション アイテムを保存するテーブルを作成する必要があります。次の例は、データベース セッション ドライバー テーブルのスキーマ宣言です:
Schema::create('sessions', function ($table) { $table->string('id')->unique(); $table->integer('user_id')->nullable(); $table->string('ip_address', 45)->nullable(); $table->text('user_agent')->nullable(); $table->text('payload'); $table->integer('last_activity');});
session:table Artisan コマンドを使用して、データベース セッション ドライバー移行テーブルを生成することもできます:
php artisan session:tablecomposer dump-autoloadphp artisan migrate
Redis
Redis セッション ドライバーを使用する前にの場合、Composer を介して predis/predis (~1.0) をインストールする必要があります。
その他のセッションメモ
Laravel フレームワークは内部でセッション内のキーとして Flash を使用するため、セッション内でこの名前のキーを使用することは避けてください。
安全に暗号化されたセッション データを保存する必要がある場合は、構成ファイルで暗号化オプションを true に設定できます。
セッションにアクセス
まずはセッションにアクセスしましょう。 HTTP リクエストを通じてセッション インスタンスにアクセスできます。 HTTP リクエストは、コントローラー メソッドのタイプ ヒントを使用して依存関係を注入できます。コントローラーメソッドの依存関係は、Laravel のサービスコンテナーを通じて注入されることを覚えておく必要があります:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{ /** * Show the profile for the given user. * * @param Request $request * @param int $id * @return Response */ public function showProfile(Request $request, $id) { $value = $request->session()->get('key'); // }}
セッションから値を取得するとき、get メソッドの 2 番目のパラメーターにデフォルト値を指定することもでき、デフォルト値は次のときに返されます。セッションは対応するキーの値を取得しません。対応するキーが見つからない場合は、Closure をデフォルト値として渡すこともできます。
$value = $request->session()->get('key', 'default');$value = $request->session()->get('key', function () { return 'default'; });
セッションからすべての値を取得したい場合は、Closure の実行結果によって返される値がデフォルト値として使用されます。 all メソッドを使用できます:
$data = $request->session()->all();
グローバル ヘルパー メソッドのセッションを使用して値を取得および保存できます:
Route::get('home', function () { // Retrieve a piece of data from the session... $value = session('key'); // Store a piece of data in the session... session(['key' => 'value']);});
セッション内に特定の項目が存在するかどうかを判断します
has メソッドを使用して、セッションに項目が含まれている場合は、true を返します:
if ($request->session()->has('user')) { //}
セッションにデータを保存します
セッションのインスタンスを取得すると、基になるデータを操作できるようになり、さまざまなインスタンスを通じて操作できるようになります。方法。たとえば、put メソッドを使用して、セッションに新しいデータ項目を保存できます。
$request->session()->put('key', 'value');
値が配列であるセッション内の項目にコンテンツをプッシュします
新しい値をプッシュするために、push メソッドを使用できます。セッションへの挿入 値は配列内の項目です。たとえば、user.teams キーがセッション内の配列のパスを示している場合、次のように配列に新しい値をプッシュできます:
$request->session()->push('user.teams', 'developers');
アイテムを取得して削除します
pull メソッドはそれを取得しますセッション内の項目を削除します:
rrreeセッション内の項目を削除します
すべてのデータを削除したい場合は、forget メソッドを使用して、セッション内のデータの項目を削除できます。セッションでは、flush メソッドを使用できます:
rrreeセッション ID を再生成します
セッション ID を再生成する必要がある場合は、regenerate メソッドを使用できます:
$request->session()->regenerate();
有时候你希望在 session 中存储某些数据,但是只允许下一次请求时使用,使用后即消除。那么就可以使用 flash 方法。这方法在 session 中存储的数据只能在随后的请求中进行访问,并且在之后删除。闪存的数据通常用来做一些临时的状态消息:
$request->session()->flash('status', 'Task was successful!');
如果你需要维持闪存的数据到更多的请求,你可以使用 reflash 方法,它会维持所有的闪存数据到额外的请求中。如果你只需要维持指定的闪存数据,你可以使用 keep 方法:
$request->session()->reflash();$request->session()->keep(['username', 'email']);
你需要使用 Session 假面的 extend 方法才能添加额外的 session 驱动到 Laravel 中。你可以在服务提供者的 boot 方法中来调用 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() { // }}
你应该注意你的自定义 session 驱动应该实现 SessionHandlerInterface 接口。该接口仅包含了几个简单的需要实现的方法。一个实现了的 MongoDB 驱动的结构应该像下面一样:
<?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) {}}
由于这些方法并不像缓存的 StoreInterface 那样难于理解。所以,我们就来快速的过一下吧:
一旦你的 session 驱动被注册。你就可以在 config/session.php 配置文件中使用 mongo 驱动了。