FuelPHP

FuelPHPのSessionクラス

更新日:

今日は、FuelPHPのセッションクラスについて調べてみたいと思います。セッションとは、サイトにアクセスしているユーザーを識別するための仕組みです。PHPにおけるセッションは『セッションID』と呼ばれるIDで管理され、セッションIDが同じであれば同じセッションのデータを取得することが出来ます。このセッションを使うことにより複数ページにまたがってデータを保持することが出来ます。

1) FuelPHPのセッションに関する設定ファイルはfuel/core/configフォルダのsession.phpファイルに保存されています。セッションに関する設定を変更する場合は、このファイルをfuel/app/configフォルダにコピーして、そのコピーしたファイルを修正して利用します。

2) それでは、コピーしたsession.phpファイルを開いてみます。

  • 'auto_initialize'=>true,
    自動的に既定のドライバがロードされます。 手動で指定する場合はfalseに設定します。
  • 'driver'=>'cookie',
    利用するドライバの初期値はクッキーになっています。'cookie','db',memchached',redis','file'を指定することが出来ます。
  • 'match_ip'=>false,
    クライアントのIPアドレスが一致するかどうかを指定します。これをtrueにすると、ユーザーがプロキシサーバーを利用している場合、パブリックIPアドレスとプライベートIPアドレスの両方一致しなければ、セッションを破棄します。
  • 'match_ua'=>true,
    trueの場合は、セッションcookieに格納されているユーザーエージェント文字列とWebサーバーで受け取ったユーザーエージェント文字列 を比較し、不一致の場合はセッションを破棄します。
  • 'cookie_domain'=>''
    セッションクッキーの有効なドメインを指定します。
  • 'cookie_path'=>'/'
    特定のパスに対してのみ有効にしたい場合はここにパスを入力します。
  • 'cookie_http_only'=>null
  • 'expire_on_close'=>false
    trueに指定するとブラウザが閉じられたときにセッションを破棄します。expiration_timeよりも優先されます。
  • 'expiration_time'=>7200
    セッションの有効期限を秒数で指定します。初期値は2時間に指定されています。
  • ’rotation_time'=>300
    セッションハイジャックを防ぐために指定された間隔でセッションIDを変更します。初期値は5分に指定されています。
  • 'flash_id'=>'flash'
    Flash変数はフラッシュIDとセッション変数の組み合わせによりセッションで識別されます。また、Flash変数を使うことにより変数名の名前衝突をさけることができます。
  • 'flash_auto_expire'=>true
    trueに指定すると次にページ要求後に自動的に期限切れになります。falseに設定すると次のFlash変数を取得するまでセッションに格納されています。
  •  'post_cookie_name'=>''
  • 'cookie'=>array('cookie_name'=>'fuelcid')
    セッションドライバにクッキーを使用するときの設定です。
  • 'file'=>array('cookie_name'=>'fuelfid','path'=>',/tmp',gc_probability'=>5)
    セッションドライバにファイルを使用するときの設定です。
  • 'memcached'=>array('cookie_name'=>'fuelmid', 'servers'=>.....)
    セッションドライバにMemcachedを使うための設定です。MemcachedもNoSQLの分類に含まれます。Memchachedとはデータとオブジェクトをメモリ内にキャッシュさせ、データベースを用いたWebサイトを高速化するために用いられる高性能な分散メモリキャッシュサーバーです。
  • 'db'=>array('cookie_name'=>'fueldid','database'=>null,'table'=>.......)
    セッションドライバにデータベースを使うための設定です。
  •  'redis'=>array('cookie_name'=>'fuelrid','database'=>'default')
    セッションドライバにNoSQLのredisを使うための設定です。

MySQLをセッションドライブに指定するための設定

3) Memchachedやredisは、高速に処理できることは分かるのですが、私の勉強不足によりレンタルサーバーで利用できるのかどうかも分かりませんので、無難なMySQLをセッションドライバに指定することにしたいと思います。

4) まず、データベーステーブルを作成します。PHPMyAdminを起動したら、SQLタブをクリックして、下記コードをコピー&ペースとして実行ボタンをクリックします。

CREATE TABLE IF NOT EXISTS `sessions` (
 `session_id` varchar(40) NOT NULL,
 `previous_id` varchar(40) NOT NULL,
 `user_agent` text NOT NULL,
 `ip_hash` char(32) NOT NULL DEFAULT '',
 `created` int(10) unsigned NOT NULL DEFAULT '0',
 `updated` int(10) unsigned NOT NULL DEFAULT '0',
 `payload` longtext NOT NULL, PRIMARY KEY (`session_id`),
 UNIQUE KEY `PREVIOUS` (`previous_id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8;

5) sessionsという名前のテーブルが作成され、sessionsには、7つのフィールドが作成されています。

6) 次に、先程コピーしたfule/app/config/session.phpを開き、33行目のセッションドライバーを'cookie'から'db'に変更します。

7) それでは、『FuelPHPで簡単認証システム』で作成したページにアクセスして、ログインしてみます。

8) セッション情報がデータベースに登録されています。

Sessionクラス

それでは、Sessionクラスを使うためにSessionクラスのメソッドを調べてみましょう。

  • instance(クッキー名)
    指定されたクッキー名のインスタンスを返します。クッキー名がNULL値の場合、config/session.phpで定義されたクッキー名を指定します。指定したクッキーが存在しないときはfalseを返します。
  • set(セッション変数,値)
    セッション変数に値をセットします。これは連想配列で指定することも出来ます。
  • get(セッション変数,既定値)
    指定したセッション変数の値を取得します。 指定したセッション変数が存在しないときは、既定値が戻ります。既定値が指定されていないときはNULL値が戻ります。セッション変数を指定しないときは全てのセッション変数の値を取得します。
  • delete(セッション変数)
    指定したセッション変数を削除します。
  • set_flash(セッション変数,値)
    指定した セッションフラッシュ変数に値をセットします。
  • get_flash(セッション変数,既定値)
    セッションフラッシュ変数の値を取得します。セッションフラッシュ変数が存在しないときは、既定値が戻ります。既定値が指定されていないときはNULL値を返します。
  • keep_flash(セッション変数)
    セッションフラッシュ変数をページ遷移後も破棄しないで値を渡します。
  • delete_flash(セッション変数)
    セッションフラッシュ変数を削除します。
  • create()
    新しいセッションを作成します。セッションが既に存在するときは、古いセッションは廃棄され、新しいセッションが作成されます。
  • destroy()
    既存のセッションを破棄します。
  • read()
    ユーザーが手動でセッションを読み取ります。
  • write()
    ユーザーが手動でセッションを書き込みます。
  • rotate()
    ユーザーが手動でセッションIDを変更します。通常はconfigの定義により定期定期に変更されます。
  • key(キー名)
    セッションキーの要素を取り出します。キー名がNULL値の場合、デフォルトでは、session_idが指定されます。

本日は以上です。

-FuelPHP
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.