ホームページ >PHPフレームワーク >Laravel >Laravelのセッション有効期限について詳しく解説
Laravel の次のチュートリアル コラムでは、laravel でのセッションの有効期限について紹介します。
プロジェクト開発のプロセスでは、フロントエンドとバックエンドの分離でセッションを使用してユーザーのログイン情報を保存する必要があります。これには、セッションの有効期間セッションはphpでのセッション有効期間とlaravelでのセッション有効期間に分かれていますデフォルトの有効期間はphpでsession.gc_maxlifetimeを参照してください。 ini デフォルトは 1440 秒で、これはほぼ 24 分ですそして、laravel のセッション有効期間は config/session.php
'lifetime' => 120, 'expire_on_close' => false,# にあります##If 'expire_on_close' is set to If false, 'lifetime' is valid. If 'expire_on_close' is set to true, 'lifetime' is valid.
laravel のセッションの具体的な使い方について
学習ソース: https://www.chenyudong .com/archives/laravel-session-use.html
公式文書アドレス: http://laravelacademy.org/post/7954.html
Laravel を使用してアプリケーションを開発し、元のコードをコピーします。前のコード セッションは
$_SESSION を使用していました。他のコンポーネントに依存していないため、移植してもうまく動作すると思いました。結果、この 未定義変数が表示されました: _SESSION
Laravel のセッション設定ファイルはapp/config/session.php
に設定されています。セッション構成ファイルで利用可能なオプション設定とコメントで。 Laravel はデフォルトで
を使用してセッションを実装します。彼女は PHP のネイティブ $_SESSION (php のネイティブ セッションは php.ini の場所に依存します) を使用しないため、session_start()
、$_SESSION## などの PHP 関連のセッション関数を無視します。 #。プロセスの実行中、Laravel はセッション情報を
app/storage/session/ ディレクトリに書き込むため、このディレクトリには書き込み権限が必要です。そうでない場合、セッションは正常に書き込まれません。
デフォルトのファイルをセッション実装として使用することに加えて、Laravel は
cookie
Memcached、
Redis、
database# もサポートしています。 ## バックエンド ドライバーはセッションの実装として機能します。 WeChat パブリック アカウントとユーザー間のやり取りなど、必要に応じてセッション実装を自分で実装する必要がありますが、WeChat サーバーが毎回リクエストを作成し、ソースによってユーザーを識別できないため、セッションを直接使用することはできませんリクエストの。 Laravel のセッション概要 API
//session的永久保存(在不过期范围内) Session::put('key', 'value'); //等同于PHP的原生session $_SESSION['key'] = 'value'; //get操作 $value = Session::get('key', 'default'); //去除操作并删除,类似pop概念 $value = Session::pull('key', 'default'); //检测是否存在key Session::has('users'); //删除key Session::forget('key');セッションが期限切れにならない限り、この通信は基本的に永続的に保存され、次の http リクエストまで存在します。以下のフラッシュのコンセプトとは異なります。
//保存key,value Session::flash('key', 'value'); //取值方法还是一样的 Session::get('key'); //刷新快闪数据时间,保持到下次请求 Session::keep(array('username', 'email'));
この flash
の概念は、上記の
の概念とは異なります。 put: セッションが期限切れにならない限り、この通信は基本的に永続的に保存され、次のリクエストまで存在します。
class LoginController { public function login(){ Session::put('key','value'); print_r( Session::all() ); //取出来看看是否put成功 exit; //习惯性的调试都exit,不执行后续代码 //return Redirect::to(/); 框架在return后还会有后续的代码执行的 } }
app/storage/session ディレクトリにファイルは生成されませんでした。何かがおかしいと感じます。
Session::save()というメソッドがあったので、それも使ってみたところ、セッションファイルが正常に生成されていました。したがって、LaravelはPHPのネイティブセッションを使用しないため、すべての
put
通話に関連するコードを表示します。 laravel がコンパイルされた後、
bootstrap/compiled.php で
class Middleware implements HttpKernelInterface { ... public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { $this->checkRequestForArraySessions($request); if ($this->sessionConfigured()) { $session = $this->startSession($request); // 启动session $request->setSession($session); } $response = $this->app->handle($request, $type, $catch); // 调用controller的method if ($this->sessionConfigured()) { $this->closeSession($session); //关闭session $this->addCookieToResponse($response, $session); } return $response; } ... protected function closeSession(SessionInterface $session) { $session->save(); // 保存session $this->collectGarbage($session); } }
小提示:如果不知道函数调用情况,可以在controller中throw new Exception();
,然后在/config/app.php
的debug更改为debug=>true
。可以看到函数的调用关系。
可以看见,在调用完controller之后,调用了session->save()
的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;
,那么session是不会被保存的,除非主动的写Session::save()
才能手工的保存起来。因此在debug调试的时候千万要注意啊。
以上がLaravelのセッション有効期限について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。