CodeIgniter 3 Session Library

CodeIgniter 3 Session Library

公式のマニュアルはここです。

おそらく一番変わったのではないかと思うセッションライブラリの変更点です。
基本的には下位互換があるので2系から3系にアップグレードしてもほぼそのまま動くと思います。

ストレージドライバ

  • files (default; file-system based)
  • database
  • redis
  • memcached

新たにredisとmemcachedが追加されてます。
自分はDBで事足りてますが、環境によってはとても嬉しい追加ではないでしょうか。

セッション読み込み

// 単体で取得する場合
$item = $_SESSION['item'];
$item = $this->session->item;
$item = $this->session->userdata('item');
 
// 全体を取得する場合
$items = $_SESSION;
$items = $this->session->userdata();

PHPのデフォルトのセッションも使えるようになりました。
新CI表記では関数通さずに取得できるようになったのでスッキリした感じです。

セッション追加

// 単体を代入する場合
$_SESSION['item'] = 'hogehoge';
$this->session->item = 'hogehoge';
$this->session->set_userdata('item', 'hogehoge');
 
// 全体を代入する場合
$items = array(
    'item01' => 'hogehoge',
    'item02' => 'hogehoge',
    'item03' => 'hogehoge',
);
$_SESSION = $items;
$this->session->set_userdata($items);

こちらも読み込みと同じです。
新CI表記読みやすくていいですねー

セッションの確認

isset($_SESSION['item']);
$this->session->has_userdata('item');

以前はなかった機能ですね。
返り値はTRUE、FALSEで返ってきます。

セッションの削除

// 単体で削除
unset($_SESSION['item']);
$this->session->unset_userdata('item');
 
// まとめて削除
$array_items = array('item01', 'item02');
$this->session->unset_userdata($array_items);

フラッシュデータ

// CI2系統での表記
$this->session->set_flashdata('item', 'hogehoge');
$item = $this->session->flashdata('item');
$this->session->keep_flashdata('item');
$this->session->keep_flashdata(array('item01', 'item02'));
 
// CI3系統での表記
$this->session->item = 'hogehoge';
$this->session->mark_as_flash('item');
 
$_SESSION['item01'] = 'hogehoge';
$_SESSION['item02'] = 'hogehoge';
$this->session->mark_as_flash(array('item01', 'item02'));

ここからがらっと変わります。
CI2はフラッシュデータというセッションが別で用意されていましたが
CI3からは通常のセッションをフラッシュデータに変換?するようになりました。

読み出しはCI3書き方でのみ通常のセッションと同じように扱えます。
下位互換を残しているのでCI2の書き方もこれまでどおり使えます。

テンポラリデータ

ここから新機能です。
なんと、有効期限のセッションデータが使えるようになりました。
redisなど使ったことがある方はわかるかもしれませんが、セッションデータごとに有効期限をつけることができます。

$this->session->item = 'hogehoge';
$this->session->mark_as_temp('item', 300);

使い方は基本はフラッシュデータと同じで、セッションに代入後 テンポラリデータに変換します。
第二引数は有効期限の秒数を入れます。
上のコードで行くと300秒の有効期限のセッションとなります。

$this->session->set_tempdata('item', 'hogehoge', 300);

CI2風なこんな書き方もできます。

セッション破棄

session_destroy();
$this->session->sess_destroy();

これはもう説明はいりませんね。
ながながと、書きましたが大体はこんな感じです。
まだ全部は見切れていないのですが個人的にはCI3の中で一番変化のあったライブラリだと思います。

Profile

Kazuki Hayashi

I'm a full stack engineer.
I love programming and alcohol.