* @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;
}
}
?>