NAME
TL::Session - セッション
SYNOPSIS
$TL->startCgi(
-DB => 'DB',
-Session => 'Session',
-main => \&main,
);
sub main {
my $session = $TL->getSession('Session');
my $oldValue = $session->getValue;
$session->setValue(12345);
...
}
DESCRIPTION
64bit符号無し整数値の管理機能を持ったセッション管理クラス。
セッションは64bit符号無し整数以外のデータを取り扱えない為、その他のデータを管理したい場合は、 セッションキーを用い別途管理する必要がある。
セッションキーは、 出力フィルタ に TL::Filter::HTML を使用している場合は クッキー に、 TL::Filter::MobileHTML の場合は クエリ に、それぞれ挿入される。
また、 入力フィルタ に TL::InputFilter::HTML を使用している場合は クッキー から、TL::Filter::MobileHTML の場合は クエリ から、それぞれ読み取られる。
Sessionは DB を使用してセッションの管理を行う。
プログラム本体とDB接続を共有するため、以下の点に注意しなければならない。
METHODS
$TL->getSession
-
$session = $TL->getSession($group)
TL::Session オブジェクトを取得。 引数には ini で設定したグループ名を渡す。省略可能。
このメソッドは、 TL#startCgi の呼び出し時に
-Session => '(Iniグループ名)'
で指定されたグループのセッションが有効化 されていなければdie
する。引数省略時は 'Session' グループが使用される。
isHttps
-
$session->isHttps
現在のリクエストがhttpsなら1を、そうでなければundefを返す。
if ($session->isHttps) { ... }
get
-
$sid = $session->get
ユニークなセッションキーを取得する。
セッションキーは64bit符号無し整数値となる。
Perlでは通常32bit整数値までしか扱えないため、セッションキーを数値として扱ってはならない。
セッションが存在しなければ、新規に発行する。
セッションの発行は常に行え、double モード時の非SSL側からの get メソッド呼び出しでもセッションは設定される。 ただし、SSL側からアクセスした際にセッションが無効になるため、その時にセッションIDは再作成される。
このメソッドの呼び出しは、コンテンツデータを返す前に行わなければならない。
renew
-
$sid = $session->renew
新しくユニークなセッションキーを発行し、取得する。
以前のセッションキーが存在した場合、そのセッションキーは無効となる。 また、以前のセッションに保存されていた値も破棄される。
このメソッドの呼び出しは、コンテンツデータを返す前に行わなければならない。
discard
-
$session->discard
現在のセッションキーを無効にする。
このメソッドの呼び出しは、コンテンツデータを返す前に行わなければならない。
setValue
-
$session->setValue($value)
セッションに値を設定する。
設定できる値は '64bit符号無し整数' のみ。 その他のデータを管理したい場合は、セッションキーを用いて別途実装する必要がある。
doubleモードの場合は、SSL起動時の場合に限り、両方のセッションに書き込まれる。 doubleモードで非SSL側からこのメソッドを使ってセッションを書換えようとした場合、 httpsモードで非SSL側から書き換えようとした場合は
die
する。このメソッドの呼び出しは、コンテンツデータを返す前に行わなければならない。
getValue
-
$value = $session->getValue
セッションから値を取得する。
セッションが存在しない場合は undef を返す。
getSessionInfo
-
($name, $sid, $checkval) = $session->getSessionInfo
セッション情報を取得する。
クッキーやフォームにセッションを保存する際の名称、セッションキー、チェック値を返す。 チェック値は、現在のリクエストが https/http によって使用されているものが返される。 そのため、double モードの場合、現在のリクエスト状態に応じてチェック値が異なる。
セッションが存在しない場合は $sid、$checkval には undef が返る。
Ini パラメータ
- mode
-
mode = double
設定可能な値は、'http'、 'https'、 'double'のいずれか。省略可能。
デフォルトはdouble。
- httpモード
-
SSLでの保護がないセッションを利用する。http/httpsの両方で使用できるが、セッションキーはhttp側から漏洩する可能性があるため、https領域からアクセスした場合も、十分な安全性は確保できないことに注意する必要がある。
- httpsモード
-
SSLでの保護があるセッションを利用する。セッションキーはhttp側からの漏洩を防ぐため、http通信上には出力されない。https側でのみセッションへのアクセスが可能。
- doubleモード
-
http側とhttps側で二重にセッションを張る。 https側からのみセッションへの書き込み・破棄が行え、その際にhttp側のセッション情報も同時に書き換えられる。 http側からはhttps側からセットされたセッション情報の参照のみが出来る。
http側はセッションキー漏洩の危険性があり、十分な安全性は確保できないが、https側は十分な安全性が確保できる。http側からセッションキーが漏洩した場合でも、https領域でのアクセスは安全である。
http領域読込 http領域書込 https領域読込 http領域書込 httpモード ○ ○ ○ ○ httpsモード C<die> C<die> ○ ○ doubleモード ○ C<die> ○ ○
-
cookie = Cookie
http領域で使用するクッキーのグループ名を指定する。省略可能。
デフォルトは'Cookie'。
-
https 領域で使用するクッキーのグループ名を指定する。省略可能。 secureフラグが付いていなければエラーとなる。
デフォルトは'SecureCookie'.
- timeout
-
timeout = 30 min
指定の時間経過したセッションは無効とする。度量衡 参照。省略可能。 最短で timeout - updateinterval の時間でタイムアウトする可能性がある。
デフォルトは30min。
- updateinterval
-
updateinterval = 10 min
最終更新時刻から指定時間以上経過していたら、DBの更新時刻を更新する。度量衡 参照。省略可能。 最短で timeout - updateinterval の時間でタイムアウトする可能性がある。
デフォルトは10min。
- setvaluewithrenew
-
setvaluewithrenew = 1
setValueした際に自動的にrenewを行うか否か。 0の場合、行わない。 1の場合、行う。
デフォルトは1。
- dbgroup
-
dbgroup = DB
使用するDBのグループ名。 ini で設定したグループ名を渡す。 TL#startCgi で有効化しなければならない。
- dbset
-
dbset = W_Trans
使用する書き込み用DBセット名。 TL#startCgi で有効化しなければならない。 ini で設定したグループ名を渡す。
- readdbset
-
readdbset = R_Trans
使用する読み込み用DBセット名。 TL#startCgi で有効化しなければならない。 ini で設定したグループ名を渡す。
省略された場合は dbset と同じものが使用される。
- sessiontable
-
sessiontable = tl_session
セッションで使用するテーブル名。 デフォルトは tl_session_グループ名 が使用される。
- csrfkey csrfkey = JLapCbI4XW7G8oEi
-
addSessionCheck及びhaveSessionCheckで使用するキー。 サイト毎に値を変更する必要性がある。
SEE ALSO
- TL
- TL::Cookie
- TL::DB
- TL::Filter::HTML
- TL::Filter::MobileHTML
- TL::InputFilter::HTML
- TL::InputFilter::MobileHTML
AUTHOR INFORMATION
Copyright 2006 YMIRLINK Inc. All Rights Reserved.
This framework is free software; you can redistribute it and/or modify it under the same terms as Perl itself
このフレームワークはフリーソフトウェアです。あなたは Perl と同じライセンスの 元で再配布及び変更を行うことが出来ます。
Address bug reports and comments to: tl@tripletail.jp
HP : http://tripletail.jp/