* @copyright copyright(c) 2006 Yoshinori Ishii All Rights Reserved. * @version CVS: $Id: Ticket.class.php,v 1.2 2006/02/06 12:03:44 cvs Exp $ * @see */ if (!defined('TICKET_PREFIX')) { define('TICKET_PREFIX', 'Ticket_'); } if (!defined('TICKET_HASH')) { define('TICKET_HASH', 'hash'); } /** * チケット管理クラス * * フォーム登録処理などの時、該当チケットの発行・有効期限 * チェック・破棄を担当する。このクラスを利用する際は、事 * 前にsession_start()をコールしておいてください。 * * * require_once 'Ticket.class.php'; * * session_start(); * * $ticket_name = 'something'; * $limit = 300; * * if (Ticket::hasTicket($ticket_name) === false) { * Ticket::generateTicket($ticket_name, $limit); * doSomething1(); * } else { * Ticket::deleteTicket($ticket_name); * doSomething2(); * } * * * * require_once 'Ticket.class.php'; * * session_start(); * * if (Ticket::isReload()) { * echo 'reloaded!'; * } else { * echo 'welcome to the real world!'; * } * * @package Ticket * @author Yoshinori Ishii * @access public */ class Ticket { /** * チケット発行 * * @param string $ticket_name チケット名 * @param integer $limit チケット有効期間(秒) * @return integer 有効期日(Unixタイムスタンプ、デフォルトは1年間) * @access public */ function generateTicket($ticket_name, $limit = 31536000) { $name = TICKET_PREFIX.$ticket_name; $_SESSION[$name] = time() + $limit; return $_SESSION[$name]; } /** * チケットの有効期限をチェック * * @param string $ticket_name チケット名 * @return bool 有効期限以内であればtrue * @access public */ function hasTicket($ticket_name) { $name = TICKET_PREFIX.$ticket_name; if (isset($_SESSION[$name]) && is_numeric($_SESSION[$name]) && time() <= $_SESSION[$name]) { return true; } return false; } /** * チケット破棄 * * @param string $ticket_name チケット名 * @return void * @access public */ function deleteTicket($ticket_name) { $name = TICKET_PREFIX.$ticket_name; if (isset($_SESSION[$name])) { unset($_SESSION[$name]); } } /** * ハッシュの取得 * * @param string $method リクエストメソッド(post / get) * @return string リクエストメソッドのハッシュ値 * @access public */ function getHash($method = 'post') { $name = TICKET_PREFIX.TICKET_HASH; $method = strtolower($method); switch ($method) { case 'get': $target = $_GET; break; default: $target = $_POST; break; } return md5(serialize($target)); } /** * リロードチェック * * @param string $method リクエストメソッド(post / get) * @return bool リロードと判断したらtrue * @access public */ function isReload($method = 'post') { $name = TICKET_PREFIX.TICKET_HASH; $hash = Ticket::getHash($method); $ret = false; if (isset($_SESSION[$name]) && $_SESSION[$name] == $hash) { $ret = true; } $_SESSION[$name] = $hash; return $ret; } } ?>