ホームページ > バックエンド開発 > PHPチュートリアル > [ Laravel 5.2 ドキュメント ] サービス -- セッション

[ Laravel 5.2 ドキュメント ] サービス -- セッション

WBOY
リリース: 2016-06-23 13:17:03
オリジナル
877 人が閲覧しました

1. はじめに

HTTP 駆動のアプリケーションはステートレスであるため、ユーザーのリクエスト情報を保存するために Session を使用します。 Laravel は、クリーンで統合された API を通じてさまざまなバックエンド セッション ドライバーを処理します。現在サポートされている人気のバックエンド ドライバーには、Memcached、Redis、データベースなどがあります。

1.1 設定

セッション設定ファイルは config/session.php にあります。デフォルトでは、Laravel で使用されるセッションドライバーはファイル駆動型であり、多くのアプリケーションでは問題ありません。実稼働環境では、セッションのパフォーマンスを高速化するために、memcached ドライバーまたは redis ドライバーの使用を検討できます。

セッションドライバーは、リクエストされたセッションデータが保存される場所を定義します。安全な Cookie で暗号化されます。

    データベース – セッション データはデータベースに保存されます。
  • memcached / redis – セッション データは memcached/redis に保存されます。
  • 配列 – セッション データは単純な PHP 配列に保存されます。複数のリクエストの間で変換されます。 永続的。
  • 注: アレイ ドライバーは、セッション データの永続化を避けるためにテストを実行するためによく使用されます。
1.2 セッションドライバーの予備知識

データベース

データベースセッションドライバーを使用する場合、セッション項目を含めるようにテーブルを設定する必要があります。 以下は、データテーブルのテーブル構造宣言です。
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');        //    }}
ログイン後にコピー

セッションからデータを取得するときに、get メソッドの 2 番目のパラメーターとしてデフォルト値を渡すこともできます。指定されたキーがセッションに存在しない場合は、デフォルト値が返されます。クロージャをデフォルト値として get メソッドに渡すと、クロージャが実行され、実行結果が返されます:

$value = $request->session()->get('key', 'default');$value = $request->session()->get('key', function() {    return 'default';});
ログイン後にコピー

セッションからすべてのデータを取得したい場合は、all メソッドを使用できます:

$data = $request->session()->all();
ログイン後にコピー

Youグローバル 1 つの PHP 関数セッションを使用して、セッション内のデータを取得および保存することもできます。

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 を再生成する

セッション ID を再生成する必要がある場合は、regenerate メソッドを使用できます:

$request->session()->regenerate();
ログイン後にコピー

2.1 ワンタイム データ

場合によっては次のリクエストでのみ有効なデータをセッションに保存したい場合があります。これはフラッシュ メソッドを使用して実現できます。このメソッドを使用して保存されたセッション データは、後続の HTTP リクエストでのみ有効であり、その後削除されます:

$request->session()->flash('status', 'Task was successful!');
ログイン後にコピー

より多くのリクエストでワンタイム データを保持する必要がある場合は、フラッシュ メソッドを使用できます。時間データ データは次のリクエストまで保持されます。特定の 1 回限りのデータを保存したい場合は、keep メソッドを使用できます。

$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()    {        //    }}
ログイン後にコピー

カスタム セッション ドライバーは、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 インターフェイス メソッドほど理解するのが簡単ではありません。各メソッドを簡単に説明します。
  • open メソッドはファイルベースのセッション ストレージ システムに使用されます。Laravel には既にファイル セッション ドライバーが含まれているため、このメソッドにコードを配置する必要はなく、空のメソッドに設定できます。
  • close メソッドは open メソッドと同じであるため、このメソッドはほとんどのドライバーでは使用されません。
  • read メソッドは、指定された $sessionId に一致するセッション データの文字列バージョンを返す必要があります。ドライバーからのセッション データの取得または保存には、Laravel がすでにシリアル化を行っているため、シリアル化やその他のエンコーディングは必要ありません。
  • write メソッドは、指定された $data を、MongoDB、Dynamo などの永続ストレージ システムの対応する $sessionId に書き込む必要があります。
  • destroy メソッドは、$sessionId に対応するデータを永続ストレージから削除します。
  • gc メソッドは、指定された $lifetime を超えるすべてのセッション データを破棄します。Memcached や Redis など、独自の有効期限メカニズムを持つシステムの場合、このメソッドは空のままにすることができます。

セッションドライバーが登録されると、構成ファイル config/session.php で mongo ドライバーを使用できるようになります。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート