Laravelのセッション有効期限について詳しく解説
Laravel の次のチュートリアル コラムでは、laravel でのセッションの有効期限について紹介します。
セッションはphpでのセッション有効期間とlaravelでのセッション有効期間に分かれていますデフォルトの有効期間はphpでsession.gc_maxlifetimeを参照してください。 ini
'lifetime' => 120, 'expire_on_close' => false,
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 の 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 リクエストまで存在します。以下のフラッシュのコンセプトとは異なります。
laravel のセッションにおけるフラッシュの概念//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');
しかし、Laravel は フラッシュ flash という概念を思いつき、突然私を混乱させました。このフラッシュは、リクエストの実行回数に関係なく、2 回のリクエスト (今回と次のリクエストが有効) まで有効です。
//保存key,value Session::flash('key', 'value'); //取值方法还是一样的 Session::get('key'); //刷新快闪数据时间,保持到下次请求 Session::keep(array('username', 'email'));
この flash
の概念は、上記の
の概念とは異なります。 put: セッションが期限切れにならない限り、この通信は基本的に永続的に保存され、次のリクエストまで存在します。
- つまり、次のリクエストは使い果たされたら破棄されますが、セッション値がどんどん大きくなることはなく、一時的なデータはある程度保存されます。 この状況の使用シナリオは次のとおりです:
- セッションのランディング時間
私は単純に Session::put# が使用されていると考えていました##関数はこの変数を保存できます。したがって、私のコードは次のように書かれました: class LoginController {
public function login(){
Session::put('key','value');
print_r( Session::all() ); //取出来看看是否put成功
exit; //习惯性的调试都exit,不执行后续代码
//return Redirect::to(/); 框架在return后还会有后续的代码执行的
}
}
ログイン後にコピー
その結果、次のリクエストでセッションが見つからず、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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

マイクロサービス アーキテクチャは、PHP フレームワーク (Symfony や Laravel など) を使用してマイクロサービスを実装し、RESTful 原則と標準データ形式に従って API を設計します。マイクロサービスはメッセージ キュー、HTTP リクエスト、または gRPC を介して通信し、監視とトラブルシューティングに Prometheus や ELKStack などのツールを使用します。

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。

Laravel の Blade と CodeIgniter の Twig テンプレート エンジンを比較し、プロジェクトのニーズと個人的な好みに基づいて選択してください。Blade は MVC 構文に基づいており、適切なコード編成とテンプレートの継承を促進します。 Twig は、柔軟な構文、強力なフィルター、拡張サポート、セキュリティ サンドボックスを提供するサードパーティ ライブラリです。
