kohanaのテスト10・・・クッキーとセッションを使う
コミュニティサイトを作るとなると、クッキー、セッション、ユーザー認証をちゃんと勉強しなくてはいけません。今日はクッキーとセッションを試してみたのでメモを残します。
kohanaの設定
・クッキーの基本設定はブートストラップに書いておきます。
・htdocs/kohana/application/bootstrap.php に下記を追記します。
/** * Cookie settings */ Cookie::$salt = 'jY#8u&B4/(l+X=9bAW$5kM-mQy*6Lxh7'; Cookie::$expiration = 604800; // 1 week Cookie::$path = '/kohana/'; // Allow cookies only when going to Cookie::$secure = FALSE; // TRUE = accessed only on a secure(HTTPS) connection Cookie::$httponly = TRUE; // Make cookies inaccessible to Javascript
・セッションには定義ファイルがあります。
・kohana/application/config/session.php というファイルを作り、下記のような内容にします。
<?php return array( 'native' => array( 'name' => 'kohana', 'lifetime' => 604800, // 7 days ), 'cookie' => array( 'name' => 'kohana', 'encrypted' => TRUE, 'lifetime' => 604800, ), 'database' => array( 'name' => 'kohana', 'encrypted' => TRUE, 'lifetime' => 604800, 'group' => 'default', 'table' => 'sessions', 'columns' => array( 'session_id' => 'session_id', 'last_active' => 'last_active', 'contents' => 'contents' ), 'gc' => 500, // 1:x chance that garbage collection will be run ), ); ?>
・データベースを使う場合は phpMyAdmin に次の SQL を使ってテーブルを作ります。
但し、小生の環境ではデータベースモードは正常に機能していません。
CREATE TABLE `sessions` ( `session_id` VARCHAR(24) NOT NULL, `last_active` INT UNSIGNED NOT NULL, `contents` TEXT NOT NULL, PRIMARY KEY (`session_id`), INDEX (`last_active`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
練習用のコード
・コメントの // を付けたり外したりして機能の確認を行います。
・書き込みはリクエスト処理の最後に行われるので、書き込みと読み取りは別々に実行しないといけません。
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Controller_Test10 extends Controller { public function action_index() { // Cookie Test //Cookie::set('user_id', 'admin'); //Cookie::delete('user_id'); //$user = Cookie::get('user_id'); //echo $user."\n"; // Session Test $type = 'native'; // $type = Type of session (native, cookie, database) // 'database'だと、cookie,DBともに書き込み出来ていない!!! $session = Session::instance($type); $key = 'username'; $value = 'administrator'; $session->set($key, $value); //$id = $session->id(); //echo $id."\n"; //$data = $session->get($key); //echo $data."\n"; //$data = $session->as_array(); //var_dump($data); //$session->delete($key); //$success = $session->destroy(); } } ?>
今のところセッションをデータベースで管理する方法が正常に動作していません。クッキーも作られないし、DBにも記録されません。エラーも出ないし、訳が分かりません。$session の中を調べると DB とテーブルの定義とか正しく入っています。これはもしかすると kohana 側のバグかも?