CodeIgniterの勉強メモ (6) セッションデータ

ユーザのアクセスごとにデータを持たせるため、セッションを使用します。

使用の前提

暗号化キーの設定encryption_key

application/config/config.phpの修正し、暗号化キーを設定します。

$config['encryption_key'] = '540c0f4533d64';
//上記のキーはPHPのuniqid()で生成された文字列
//echo uniqid();

ライブラリをインポート

使用するたび、手動のロード

$this->load->library('session');

自動ロード application/config/autoload.php

$autoload['libraries'] = array('session');

セッション

データの書き込み

保存するデータは連想配列です。
そして、データは書き込みアクション(PHPのメソッド)自身が読めません。別アクションで読める。

public function pushdata() {
    $this->load->library('session');
    $vals = array("country"=>"Japan", "capital"=>"Tokyo");
    $this->session->set_userdata('address', $vals);
}

データの読み取り

読み出されたデータも連想配列です。

public function getdata() {
    $this->load->library('session');
    $vals1 = $this->session->userdata('address');
    var_dump($vals1);
}

画面表示:
スクリーンショット 2014-09-07 17.37.32

cookie:(ブラウザ:chrome、プラグイン:EditThisCookie
スクリーンショット 2014-09-07 17.30.59

cookieデータの暗号化

必須ではない設定ですが、CodeIgniterのセッションはcookieで実現されたので、
ブラウザの何らかの開発ツールで見えるため、cookieデータを暗号化しないとユーザに見られます。
application/config/config.phpを修正

$config['sess_encrypt_cookie']	= TRUE;
//デフォルトはFALSEですが、TRUEにしてcookieを暗号化します。

さっきのcookieの暗号化後
スクリーンショット 2014-09-07 17.57.46

一回しか読めないフラッシュデータ flashdata

書き込み

$this->session->set_flashdata('address', $vals);

読み取り(メソッドの実行終了後に削除されるので、同じメソッド内で何度も読めるOK)

$this->session->flashdata('address');

キープ(読むと消えるので、もう一回キープしてほしい場合)

$this->session->keep_flashdata('address');
なんで一回しか読みたくないの?
cookieの容量が4KBしかないため、大事に使わないと行けないです。

    実例で説明すると:

  1. ログインしないと表示しない。ユーザにログインさせる
  2. ログインアクションが呼び出され、表示するページのURLをフラッシュデータにいったん保存
  3. ログイン完了、フラッシュデータのURLを読み出してリダイレクト、最初に表示したい内容を表示

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>