セッションを設定する方法 CodeIgniterの例
⚡ スマートサマリー
CodeIgniter Session Management はステートレス HTTP リクエスト間でユーザーデータを保存するため、アプリケーションはログインしたユーザー、カートアイテム、またはワンタイムのフラッシュメッセージを記憶できます。この例では、フラッシュメッセージとシミュレートされたログインを構築します。 CodeIgniterセッションライブラリ。

CodeIgniterセッション管理
デスクトップアプリケーションの開発経験がある方なら、グローバル変数を定義し、値を割り当てて、アプリケーションのライフサイクル全体を通して使用できることをご存知でしょう。複数のフォームを開閉する際、それぞれのリクエストからグローバル変数にアクセスできます。
つまり、アプリケーションの状態が維持されるということです。言い換えれば、ログイン時に会社名をグローバル変数に設定した場合、ログインフォームを閉じた後でも、その会社名の状態は保持されます。
HTTPは、先ほど説明したシナリオとは少し異なる動作をします。HTTPはステートレスです。つまり、あるリクエストで行った操作は、次のリクエストには引き継がれません。
この問題を回避するために、PHPには2つの解決策があります。1つは、ユーザーのコンピューターに保存される小さなファイルであるクッキーを使用する方法、もう1つは、クッキーに似ていますがサーバーに保存され、クッキーよりも容量が大きいセッションを使用する方法です。
セッションをいつ使用するか?
セッションは、ユーザーのページ間のアクティビティを把握したい場合に通常役立ちます。たとえば、ウェブサイトに保護されたエリアがあるとします。ユーザーは各ページでログインする必要はありません。ユーザーに一度ログインしてもらい、その情報をセッション変数に保存すれば、以降のリクエストで同じデータを再利用できます。その他のユースケースとしては、オンラインショップの運営などが挙げられます。ping システムでは、ユーザーはショップにアイテムを追加する必要があります。ping カート。
また、 CodeIgniterはセッションを使用して、次のリクエスト時にデータが一度だけ利用可能になるようにします。これは、データベースのレコードを編集・更新した後、ユーザーが別のページにリダイレクトされた際に何らかのフィードバックを返したい場合に便利です。
CI セッションを使用して他のページに Flash メッセージを送信する
このセクションでは、セッション ライブラリを使用して他のページに Flash メッセージを送信する方法を学習します。 Codeイグナイター.
新しいファイル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 ディレクトリ内に sessions という新しいディレクトリを作成します。
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'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
それでは、組み込みサーバーを起動しましょう。 PHP フラッシュメッセージをテストしてください
ターミナルを開く
次のコマンドを実行します
cd C:\Sites\ci-app php -S localhost:3000
ここに、
上記のコマンドは、アプリケーション コード ディレクトリを参照し、ポート 3000 で組み込みサーバーを起動します。
注:アプリケーションのパスは、ダウンロードした場所のパスと一致している必要があります。 CodeIgniterを使用する場合、コンピュータで空いているポート番号であればどれでも使用できます。ポート3000を使用する必要はありません。
以下を読み込んでください 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() {…} は、sessions ディレクトリにあるログイン ビューを読み込みます。
- public function authenticate() {…} は、logged_in および username キーのセッション ユーザー データを設定します。注: データベースに対してログイン詳細を検証していません。送信された詳細が適切であると仮定して、セッション データを設定するだけです。
- public function dashboard() {…} は、$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:0 </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(3);?></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:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></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="password" 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:0 </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を使用する必要はありません。
以下を開きます URL ウェブブラウザで: http://localhost:3000/dashboard
次のページにリダイレクトされます
ログインボタンをクリック
以下の結果が表示されます
ログインすると、セッション データを確認できるようになります。




