Codeigniter でセッションを設定する方法と例
CodeIgniter セッション管理
それまでにデスクトップ アプリケーションを開発したことがある場合は、グローバル変数を定義してそれに値を割り当て、複数のアプリケーションを開いたり閉じたりするライフ サイクル全体にわたってその変数を使用し、各リクエストが次の変数にアクセスできることをご存知でしょう。グローバル変数。
つまり、アプリケーションの状態は維持されます。 つまり、ログイン時に会社名をグローバル変数に設定した場合、ログイン フォームを閉じた後でも会社名の状態は保持されます。
HTTP は、先ほど説明した上記のシナリオとは少し異なります。 無国籍です。 つまり、XNUMX つのリクエストで何をしても、次のリクエストでは持続されません。 T
o この問題を回避します。 PHP には 2 つのソリューションがあります。 ユーザーのコンピュータに配置される小さなファイルである Cookie を使用することも、Cookie に似ているがサーバーに保存され、Cookie よりも容量が大きいセッションを使用することもできます。
セッションをいつ使用するか?
セッションは通常、ページ間のユーザーのアクティビティを知りたいときに役立ちます。たとえば、Web サイトに保護された領域があるとします。ユーザーは各ページでログインする必要はありません。ユーザーに一度ログインさせ、詳細をセッション変数に保存して、それ以降のリクエストで同じデータを再利用することができます。その他の使用例としては、ショッピング システムで作業していて、ユーザーがショッピング カートにアイテムを追加する必要がある場合などがあります。
あるいは、CodeIgniter はセッションを使用して、次のリクエストで XNUMX 回だけデータを利用できるようにします。 これは、データベース レコードを編集および更新する場合や、ユーザーが別のページにリダイレクトされたときにユーザーにフィードバックを返したい場合に便利です。
CI セッションを使用して他のページに Flash メッセージを送信する
このセクションでは、セッション ライブラリを使用して他のページに Flash メッセージを送信する方法を学習します。 CodeIgniter
新しいファイルSessionControllerを作成します
application/controllers/SessionController.php
次のコードを追加します
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
ここに、
- class SessionController extends CI_Controller {…} SessionController クラスを定義し、親コントローラー クラスを拡張します。
- public function __construct() {…} は、親クラスを初期化し、URL ヘルパーとセッション ライブラリをロードするコンストラクター メソッドを定義します。
- public function Index() {…} は、セッション インデックス ビューをロードするセッション インデックス メソッドを定義します。
- public function flash_message(){…} は、フラッシュ データを設定して flash_index ルートにリダイレクトするフラッシュ メッセージ メソッドを定義します。
次に、セッション データの値を表示するビューを作成しましょう。
application/viewsに新しいディレクトリセッションを作成します。
application/views/sessions に新しいファイルindex.phpを作成します。
次のコードを追加します
<html> <head> <title>Code Igniter Flash Session</title> </head> <body> <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p> </body> </html>
ここに、
session->userdata('msg');?> は、msg をキーとしてセッション データの値を取得し、ブラウザに表示します。
次に、セッション フラッシュ メソッドのルートを作成しましょう。
application/config/routes.php を開きます
次の行を追加します
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
組み込みサーバーを起動しましょう PHP フラッシュメッセージをテストしてください
ターミナルを開く
次のコマンドを実行します
cd C:\Sites\ci-app php -S localhost:3000
ここに、
上記のコマンドは、アプリケーション コード ディレクトリを参照し、ポート 3000 で組み込みサーバーを起動します。
注: アプリケーションのパスは CodeIgniter をダウンロードしたパスと一致する必要があり、コンピューター上で空いている任意のポート番号を使用できます。 ポート 3000 を使用する必要はありません。
Web ブラウザに次の URL を読み込みます。 http://localhost:3000/flash_message
次の URL にリダイレクトされ、次の結果が得られます。 http://localhost:3000/flash_index
Web ブラウザの更新ボタンをクリックするか、F5 キーを押します。
次の結果が得られます
CI セッションでのユーザー データの保存
次に、もう少し高度な例を見てみましょう。 簡単にするために、ユーザー認証をシミュレートし、データベース内のユーザー レコードと送信されたパスワードを検証する実際の実装は行いません。
まずはルートから始めましょう
application/configにあるroutes.phpを開きます
次のルートを追加します
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
ここに、
- $route['login'] = 'セッションコントローラー/ログイン'; ログインフォームを表示するルートを定義します
- $route['authenticate'] = 'セッションコントローラー/認証'; 成功したユーザー ログインをシミュレートするルートを定義し、セッション ログイン データを設定します。
- $route['設定'] = 'セッションコントローラー/設定'; ログインしているユーザーのみがアクセスできる保護されたページを定義します
- $route['ダッシュボード'] = 'セッションコントローラー/ダッシュボード'; ログインしているユーザーのみがアクセスできる保護されたページを定義します。
- $route['logout'] = 'セッションコントローラー/ログアウト'; セッションデータを破棄してユーザーをログアウトします
次に、SessionControllerを更新しましょう
application/controllers/SessionController.php を開きます
以下のメソッドを追加します
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
ここに、
- public function check_auth($page) {…} は、ユーザーがログインしているかどうかを確認してページへのアクセスを許可するメソッドを定義します。 ユーザーがログインしていない場合、ユーザーはフラッシュ メッセージとともにログイン ページにリダイレクトされます。
- public function login() {…} は、セッション ディレクトリにあるログイン ビューを読み込みます。
- public function authenticate() {…} は、logged_in および username キーのセッション ユーザー データを設定します。注: データベースに対してログイン詳細を検証していません。送信された詳細が適切であると仮定して、セッション データを設定するだけです。
- public functiondashboard() {…} $this->check_auth('dashboard'); を呼び出した後、ダッシュボード ページを読み込みます。 これにより、logged_in セッション キーが設定されていることを確認します。
- public function settings() {…} も保護されている設定ページをロードします
- public function logout() {…} はセッション データを破棄し、ユーザーをサインアウトします。 このメソッドはログイン ページにもリダイレクトします。
CodeIgniter セッション ビュー
application/views/sessionsに次のビューを作成します。
- Dashboard.php
- ログイン.php
- settings.php
dashboard.phpに次のコードを追加します。
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata('username');?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
ここに、
session->userdata('username');?> 認証方法で設定したユーザー名が表示されます
login.phpに次のコードを追加します。
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata('msg');?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="passport" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
ここに、
ログイン フォームを送信してルートを認証します。
次のコードをsettings.phpに追加します。
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
私たちの見解は以上です。 それではアプリケーションをテストしてみましょう。
このチュートリアルでは、組み込みの PHP Web サーバーを使用していますが、PHP をサポートする任意の Web サーバーを使用できます。
ターミナルを開く
次のコマンドを実行します
cd C:\Sites\ci-app php -S localhost:3000
ここに、
上記のコマンドは、アプリケーション コード ディレクトリを参照し、ポート 3000 で組み込みサーバーを起動します。
注: アプリケーションのパスは CodeIgniter をダウンロードしたパスと一致する必要があり、コンピューター上で空いている任意のポート番号を使用できます。 ポート 3000 を使用する必要はありません。
Web ブラウザで次の URL を開きます。 http://localhost:3000/dashboard
次のページにリダイレクトされます
ログインボタンをクリック
以下の結果が表示されます
ログインすると、セッション データを確認できるようになります。
まとめ
このチュートリアルでは、CodeIgniter セッション ライブラリの基本を学習し、それを使用して一時データをフラッシュ メッセージとして保存する方法と、より永続的なデータ (ユーザー ログイン データなど) を保存する方法を学習しました。