The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tripletail::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符号無し整数以外のデータを取り扱えない為、その他のデータを管理したい場合は、 セッションキーを用い別途管理する必要がある。

セッションキーは、 出力フィルタTripletail::Filter::HTML を使用している場合は クッキー に、 Tripletail::Filter::MobileHTML の場合は クエリ に、それぞれ挿入される。

また、 入力フィルタTripletail::InputFilter::HTML を使用している場合は クッキー から、Tripletail::Filter::MobileHTML の場合は クエリ から、それぞれ読み取られる。

Sessionは DB を使用してセッションの管理を行う。

プログラム本体とDB接続を共有するため、以下の点に注意しなければならない。

セッションの操作は、トランザクション中及びテーブルロック中には行わない。
コンテンツの出力操作は、トランザクション中及びテーブルロック中には行わない。

METHODS

$TL->getSession
  $session = $TL->getSession($group)

Tripletail::Session オブジェクトを取得。 引数には ini で設定したグループ名を渡す。省略可能。

このメソッドは、 Tripletail#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'。

securecookie

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 で設定したグループ名を渡す。 Tripletail#startCgi で有効化しなければならない。

dbset
  dbset = W_Trans

使用する書き込み用DBセット名。 Tripletail#startCgi で有効化しなければならない。 ini で設定したグループ名を渡す。

readdbset
  readdbset = R_Trans

使用する読み込み用DBセット名。 Tripletail#startCgi で有効化しなければならない。 ini で設定したグループ名を渡す。

省略された場合は dbset と同じものが使用される。

sessiontable
  sessiontable = tl_session

セッションで使用するテーブル名。 デフォルトは tl_session_グループ名 が使用される。

csrfkey
  csrfkey = JLapCbI4XW7G8oEi

addSessionCheck及びhaveSessionCheckで使用するキー。 サイト毎に値を変更する必要性がある。

SEE ALSO

Tripletail
Tripletail::Cookie
Tripletail::DB
Tripletail::Filter::HTML
Tripletail::Filter::MobileHTML
Tripletail::InputFilter::HTML
Tripletail::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/