---json
{
"title":"クッキーモジュール(Cookie)",
"description":"クッキーモジュール(Cookie)"
}
---
{{tag> BBS.pm}}
====== クッキーモジュール(Cookie) ======
このモジュールはデータを管理するためのモジュールです。\\
パラメータモジュールはメモリ上で管理するのに対し、クッキーはデータベース上で管理しますので、サーバを再起動してもデータが永続的に保持されます。\\
クッキーはユーザごとに保持され、ゲストユーザはゲストログインしたときのデフォルト値が保持されています。\\
用途は以下のようなものになります。\\
* 実行するユーティリティのフラグ
* チャットルームなどの入室状況
* 接続しているクライアントの状況
* ユーザレベルやハンドルネームなどのアカウント情報
* メニューモードなどの端末環境設定
===== new() =====
==== 説明 ====
オブジェクトを作成します。\\
==== 構文 ====
obj = new BIGModel::System::Cookie( [userid]
, host => [hostname]
, dbuser => [db_username]
, dbpass => [db_password]
, schema => [schema_name]
, table => [table_name] );
==== 引数 ====
^ 設定名 ^ 説明 ^
| userid | ユーザID\\ BIG-ModelアプリケーションでのユーザIDを指定します。 |
| db_username | データベースのユーザ名 |
| db_password | データベースのパスワード |
| schema_name | データベースのスキーマ名 |
| table_name | データベースのテーブル名 |
==== 返り値 ====
^ obj ||
^ 返り値 ^ 説明 ^
| (生成されたオブジェクト) | 成功 |
| (undef) | 失敗 |
==== 備考 ====
ユーザIDはアスキー文字(半角英数字)の他、漢字やひらがななども使用することができます。\\
ユーザIDは半角英字の大文字小文字を区別していますので'user'と'USER'はそれぞれ別のユーザになります。\\
クッキーモジュールが使用するテーブルはテーブル構造が厳密に決められていて、id, userid, k, vの4つのフィールドが定義されていることが必要です。\\
CREATE TABLE `cookie` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`userid` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
`k` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
`v` TEXT NULL DEFAULT NULL COLLATE 'utf8_general_ci',
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
関数new()を呼び出したとき、4つのフィールドが定義されていないとオブジェクトが作成されません。\\
フィールド名が違っていたり、フィールドが不足もしくは4つのフィールド以外のフィールドが定義されていても無効とみなされ、オブジェクトが作成されません。\\
===== _init() =====
==== 説明 ====
オブジェクト作成の際、属性の初期化とデータベースのテストを行います。\\
==== 構文 ====
r = _init();
==== 引数 ====
ありません。\\
==== 返り値 ====
^ r ||
^ 返り値 ^ 説明 ^
| 0 | 失敗 |
| 1 | 成功 |
==== 備考 ====
この関数は、関数new()から呼び出されますので、個別に呼び出す必要はありません。\\
この関数では引数が正しく指定されているかどうかを確認するため、データベースへの接続とクッキーモジュールが使用するテーブルのテーブル構造が規定通りであるかをチェックし、チェックに成功すると1を、失敗すると0を返します。\\
===== set() =====
==== 説明 ====
値を設定します。\\
==== 構文 ====
r = set( [key], [value] );
==== 引数 ====
^ 設定名 ^ 説明 ^
| key | 設定名 |
| value | 設定値 |
==== 返り値 ====
^ r ||
^ 返り値 ^ 説明 ^
| 0 | 失敗 |
| 1 | 成功 |
==== 備考 ====
設定名1つに対し、1つの設定値が設定できますが、複数の設定値は設定できません。\\
設定値に指定できるデータ型は、文字列、数値、未定義値(undel)のいずれかで、リファレンスは保存できません。\\
設定名は漢字やひらがななどを使用することは可能ですが、制御文字を含むことはできません。\\
配列を引数に指定することは可能ですが、引数の規則に従っていない場合はエラーとなり、設定することはできません。\\
my @arg = ( 'key', 'value' );
set( @arg ); # OK
my @values = ( 'value1', 'value2' );
set( 'key', @values ); # エラー
# ( key, value1, value2 )と解釈するため
my $values = [ 'value1', 'value2' ];
set( 'key', $values ); # エラー
# 値がリファレンスのため
===== get() =====
==== 説明 ====
設定値を取得します。
==== 構文 ====
value = get( [key] )
==== 引数 ====
^ 設定名 ^ 説明 ^
| key | 設定名 |
==== 返り値 ====
^ value ||
^ 返り値 ^ 説明 ^
| (設定値) | 指定した設定名の設定値 |
==== 備考 ====
返り値が未定義値(undef)である場合、次の可能性があります。\\
\\
(1) 設定名が定義されていない。\\
(2) 設定値が未定義値(undef)である。\\
この場合、関数ifdefined()を呼び出すことで解決することができます。\\
my $v = $c->get( 'key' ); # 設定値を得る
unless ( defined($v) ) { # 未定義値(undef)が返った
my $r = $c->ifdefined( 'key' ); # 設定名が定義されているか調べる
if ( $r == 1 ) { # 設定名が定義されている(1)
# 設定値は未定義値(undef)
}
else { # 設定名が定義されていない(0)
# 設定名が定義されていない
}
}
上記コードをスマートに記述するなら、例えば、\\
my $v = ( $c->ifdefined($k) ) ? $c->get('$k') : "\x00";
のようにすることで、設定値を取得する前に、設定名の定義状態を得て、設定名が定義されていればその設定値、設定名が定義されていなければ\x00(または適する値など)が変数に渡ります。\\
未定義値(undef)を保存するような設定名を設ける場合は、取得データの取り扱いに十分注意します。\\
===== del() =====
==== 説明 ====
設定名を削除します。\\
==== 構文 ====
r = del( [key] )
==== 引数 ====
^ 設定名 ^ 説明 ^
| key | 設定名 |
==== 返り値 ====
^ r ||
^ 返り値 ^ 説明 ^
| 0 | 失敗 |
| 1 | 成功 |
==== 備考 ====
指定した設定名をデータベースから削除します。\\
===== ifdefined() =====
==== 説明 ====
設定名の定義状態を取得します。\\
==== 構文 ====
r = ifdefined( [key] );
==== 引数 ====
^ 設定名 ^ 説明 ^
| key | 設定名 |
==== 返り値 ====
^ r ||
^ 返り値 ^ 説明 ^
| 0 | 定義されていない |
| 1 | 定義されている |
==== 備考 ====
指定した設定名の定義状態を返します。\\
設定値を取得し、未定義値(undef)を返した場合、設定名が定義されていないか未設定されていた定義値を返したかの2通りの可能性が考えられます。\\
詳しくは関数[[:projects:big-model:docs:system:cookie#get|get()]]をご覧ください。\\
===== names() =====
==== 説明 ====
設定名リストを取得します。\\
==== 構文 ====
names = names();
==== 引数 ====
なし\\
==== 返り値 ====
^ names ^
^ 返り値 ^
| [ name1, name2, ... ] |
^ 説明 ^
| データ型: 配列リファレンス\\ 値: 設定値 |
==== 備考 ====
定義されている設定名を返します。\\
返り値は配列リファレンスで返ります。\\
===== values() =====
==== 説明 ====
クッキーリストを取得します。\\
==== 構文 ====
values = values();
==== 引数 ====
なし\\
==== 返り値 ====
^ values ^
^ 返り値 ^
| { 'name1' => 'value1', 'name2' => 'value2', ... } |
^ 説明 ^
| データ型: ハッシュリファレンス\\ キー: 設定名\\ 値: 設定値 |
==== 備考 ====
定義されているクッキーリストを返します。\\
返り値はハッシュリファレンスで返ります。\\
===== _dbconnect() =====
==== 説明 ====
データベースに接続します。\\
==== 構文 ====
obj = _dbconnect();
==== 引数 ====
なし\\
==== 返り値 ====
^ obj ^^
^ 返り値 ^ 説明 ^
| データベースハンドラ(dbh) | 接続成功 |
| (undef) | 接続失敗 |
==== 備考 ====
この関数は、モジュール内の関数から呼び出すため、個別に呼び出す必要はありません。\\
データベースに接続し、接続に成功するとデータベースモジュール(DBI)が作成したデータベースハンドラオブジェクト(DBH)を、接続に失敗すると未定義値(undef)を返します。\\
データベースの接続パラメータは、[[:projects:big-model:docs:system:cookie#new|new()]]で指定します。\\
===== 最後に =====
このモジュールはシステムに統合していないため、データベースの接続はこのモジュールから直接行っていますので、データベースの設定を変更する場合はこのモジュールに直接書き換える必要があります。\\
システムが統合しましたら、一括設定できるようなものを設けますので、お手数ですが、しばらくお待ちください。\\