Helper
[ class tree: Helper ] [ index: Helper ] [ all elements ]

Source for file SC_Helper_Session.php

Documentation is available at SC_Helper_Session.php

  1. <?php
  2.  /*
  3.   * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
  4.   *
  5.   * http://www.lockon.co.jp/
  6.   */
  7.  
  8.  /**
  9.   * セッション関連のヘルパークラス.
  10.   *
  11.   * @package Helper
  12.   * @author LOCKON CO.,LTD.
  13.   * @version $Id: SC_Helper_Session.php 21194 2011-08-17 01:39:55Z Seasoft $
  14.   */
  15.  
  16.     var $objDb;
  17.  
  18.      // }}}
  19.      // {{{ constructor
  20.  
  21.      /**
  22.       * デフォルトコンストラクタ.
  23.       *
  24.       * 各関数をセッションハンドラに保存する
  25.       */
  26.      function SC_Helper_Session({
  27.          $this->objDb = new SC_Helper_DB_Ex();
  28.          session_set_save_handler(array(&$this'sfSessOpen'),
  29.                                   array(&$this'sfSessClose'),
  30.                                   array(&$this'sfSessRead'),
  31.                                   array(&$this'sfSessWrite'),
  32.                                   array(&$this'sfSessDestroy'),
  33.                                   array(&$this'sfSessGc'));
  34.      }
  35.  
  36.      // }}}
  37.      // {{{ functions
  38.  
  39.      /**
  40.       * セッションを開始する.
  41.       *
  42.       * @param string $save_path セッションを保存するパス(使用しない)
  43.       * @param string $session_name セッション名(使用しない)
  44.       * @return bool セッションが正常に開始された場合 true
  45.       */
  46.      function sfSessOpen($save_path$session_name{
  47.          return true;
  48.      }
  49.  
  50.      /**
  51.       * セッションを閉じる.
  52.       *
  53.       * @return bool セッションが正常に終了した場合 true
  54.       */
  55.      function sfSessClose({
  56.          return true;
  57.      }
  58.  
  59.      /**
  60.       * セッションのデータをDBから読み込む.
  61.       *
  62.       * @param string $id セッションID
  63.       * @return string セッションデータの値
  64.       */
  65.      function sfSessRead($id{
  66.          $objQuery new SC_Query_Ex();
  67.          $arrRet $objQuery->select("sess_data""dtb_session""sess_id = ?"array($id));
  68.          if (empty($arrRet)) {
  69.              return '';
  70.          else {
  71.              return $arrRet[0]['sess_data'];
  72.          }
  73.      }
  74.  
  75.      /**
  76.       * セッションのデータをDBに書き込む.
  77.       *
  78.       * @param string $id セッションID
  79.       * @param string $sess_data セッションデータの値
  80.       * @return bool セッションの書き込みに成功した場合 true
  81.       */
  82.      function sfSessWrite($id$sess_data)
  83.      {
  84.          $objQuery new SC_Query_Ex();
  85.          $count $objQuery->count("dtb_session""sess_id = ?"array($id));
  86.          $sqlval array();
  87.          if($count 0{
  88.              // レコード更新
  89.              $sqlval['sess_data'$sess_data;
  90.              $sqlval['update_date''CURRENT_TIMESTAMP';
  91.              $objQuery->update("dtb_session"$sqlval"sess_id = ?"array($id));
  92.          else {
  93.              // セッションデータがある場合は、レコード作成
  94.              if(strlen($sess_data0{
  95.                  $sqlval['sess_id'$id;
  96.                  $sqlval['sess_data'$sess_data;
  97.                  $sqlval['update_date''CURRENT_TIMESTAMP';
  98.                  $sqlval['create_date''CURRENT_TIMESTAMP';
  99.                  $objQuery->insert("dtb_session"$sqlval);
  100.              }
  101.          }
  102.          return true;
  103.      }
  104.  
  105.      // セッション破棄
  106.  
  107.      /**
  108.       * セッションを破棄する.
  109.       *
  110.       * @param string $id セッションID
  111.       * @return bool セッションを正常に破棄した場合 true
  112.       */
  113.      function sfSessDestroy($id{
  114.          $objQuery new SC_Query_Ex();
  115.          $objQuery->delete("dtb_session""sess_id = ?"array($id));
  116.          return true;
  117.      }
  118.  
  119.      /**
  120.       * ガーベジコレクションを実行する.
  121.       *
  122.       * 引数 $maxlifetime の代りに 定数 MAX_LIFETIME を使用する.
  123.       *
  124.       * @param integer $maxlifetime セッションの有効期限(使用しない)
  125.       */
  126.      function sfSessGc($maxlifetime{
  127.          // MAX_LIFETIME以上更新されていないセッションを削除する。
  128.          $objQuery new SC_Query_Ex();
  129.          $where "update_date < current_timestamp + '-"MAX_LIFETIME " secs'";
  130.          $objQuery->delete("dtb_session"$where);
  131.          return true;
  132.     }
  133.  
  134.     /**
  135.      * トランザクショントークンを生成し, 取得する.
  136.      *
  137.      * 悪意のある不正な画面遷移を防止するため, 予測困難な文字列を生成して返す.
  138.      * 同時に, この文字列をセッションに保存する.
  139.      *
  140.      * この関数を使用するためには, 生成した文字列を次画面へ渡すパラメーターとして
  141.      * 出力する必要がある.
  142.      *
  143.      * 例)
  144.      * <input type="hidden" name="transactionid" value="この関数の返り値" />
  145.      *
  146.      * 遷移先のページで, LC_Page::isValidToken() の返り値をチェックすることにより,
  147.      * 画面遷移の妥当性が確認できる.
  148.      *
  149.      * @access protected
  150.      * @return string トランザクショントークンの文字列
  151.      */
  152.     function getToken({
  153.         if (empty($_SESSION[TRANSACTION_ID_NAME])) {
  154.             $_SESSION[TRANSACTION_ID_NAMESC_Helper_Session_Ex::createToken();
  155.         }
  156.         return $_SESSION[TRANSACTION_ID_NAME];
  157.     }
  158.  
  159.     /**
  160.      * トランザクショントークン用の予測困難な文字列を生成して返す.
  161.      *
  162.      * @access private
  163.      * @return string トランザクショントークン用の文字列
  164.      */
  165.     function createToken({
  166.         return sha1(uniqid(rand()true));
  167.     }
  168.  
  169.     /**
  170.      * トランザクショントークンの妥当性をチェックする.
  171.      *
  172.      * 生成されたトランザクショントークンの妥当性をチェックする.
  173.      * この関数を使用するためには, 前画面のページクラスで LC_Page::getToken()
  174.      * を呼んでおく必要がある.
  175.      *
  176.      * トランザクショントークンは, SC_Helper_Session::getToken() が呼ばれた際に
  177.      * 生成される.
  178.      * 引数 $is_unset が false の場合は, トークンの妥当性検証が不正な場合か,
  179.      * セッションが破棄されるまで, トークンを保持する.
  180.      * 引数 $is_unset が true の場合は, 妥当性検証後に破棄される.
  181.      *
  182.      * @access protected
  183.      * @param boolean $is_unset 妥当性検証後, トークンを unset する場合 true;
  184.      *                           デフォルト値は false
  185.      * @return boolean トランザクショントークンが有効な場合 true
  186.      */
  187.     function isValidToken($is_unset false{
  188.         // token の妥当性チェック
  189.         $ret $_REQUEST[TRANSACTION_ID_NAME=== $_SESSION[TRANSACTION_ID_NAME];
  190.  
  191.         if ($is_unset || $ret === false{
  192.             SC_Helper_Session_Ex::destroyToken();
  193.         }
  194.         return $ret;
  195.     }
  196.  
  197.     /**
  198.      * トランザクショントークンを破棄する.
  199.      *
  200.      * @return void 
  201.      */
  202.     function destroyToken({
  203.         unset($_SESSION[TRANSACTION_ID_NAME]);
  204.     }
  205.  
  206.     /**
  207.      * 管理画面の認証を行う.
  208.      *
  209.      * mtb_auth_excludes へ登録されたページは, 認証を除外する.
  210.      *
  211.      * @return void 
  212.      */
  213.     function adminAuthorization({
  214.         $masterData new SC_DB_MasterData_Ex();
  215.         $arrExcludes $masterData->getMasterData('mtb_auth_excludes');
  216.         if (preg_match('|^' ROOT_URLPATH ADMIN_DIR '|',
  217.                        $_SERVER['PHP_SELF'])) {
  218.             $is_auth true;
  219.  
  220.             foreach ($arrExcludes as $exclude{
  221.                 if (preg_match('|^' ROOT_URLPATH ADMIN_DIR $exclude '|',
  222.                                $_SERVER['PHP_SELF'])) {
  223.                     $is_auth false;
  224.                     break;
  225.                 }
  226.             }
  227.             if ($is_auth{
  228.                 SC_Utils_Ex::sfIsSuccess(new SC_Session_Ex());
  229.             }
  230.         }
  231.     }
  232. }
  233. ?>

Documentation generated on Fri, 24 Feb 2012 14:02:48 +0900 by Seasoft