TL::Session - セッション

# 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 = 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 で設定したグループ名を渡す。 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/

TL::Session - セッション

# INDEX

- $TL->getSession
- AUTHOR INFORMATION
- DESCRIPTION
- Ini パラメータ
- METHODS
- NAME
- SEE ALSO
- SYNOPSIS
- TL
- TL::Cookie
- TL::DB
- TL::Filter::HTML
- TL::Filter::MobileHTML
- TL::InputFilter::HTML
- TL::InputFilter::MobileHTML
- cookie
- csrfkey
- dbgroup
- dbset
- discard
- doubleモード
- get
- getSessionInfo
- getValue
- httpsモード
- httpモード
- isHttps
- mode
- readdbset
- renew
- securecookie
- sessiontable
- setValue
- setvaluewithrenew
- timeout
- updateinterval
- コンテンツの出力操作は、トランザクション中及びテーブルロック中には行わない。
- セッションの操作は、トランザクション中及びテーブルロック中には行わない。

TL::Session - セッション