dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

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 側のバグかも?