public static function clear() { if (FALSE === self::$_initialized) { // 自動セッションスタート self::_init(); } // 8バイト以下の$_COOKIE[self::$_tokenKeyName]はセットされていてもTOKENとして認めない if (isset($_COOKIE[self::$_tokenKeyName]) && strlen($_COOKIE[self::$_tokenKeyName]) > 8) { // Cookieが在る場合はCookieからトークンと固有識別子を初期化する $token = $_COOKIE[self::$_tokenKeyName]; // SESSIONレコードを走査 $binds = array(self::$_sessionPKeyName => $token); $Session = ORMapper::getModel(self::$_DBO, self::$_sessionTblName, '`' . self::$_sessionPKeyName . '` = :' . self::$_sessionPKeyName . ' limit 1', $binds); if (strlen($Session->{self::$_sessionPKeyName}) > 0) { // 該当レコードを削除 $Session->remove(); } // check無しの$identifierの特定 $identifier = self::_tokenToIdentifier($token, TRUE); if (FALSE !== $identifier && strlen($identifier) > 0) { // 該当のSessionDataも削除 parent::clear($identifier); } debug('cookie clear!'); // 二度処理しない為に削除する unset($_COOKIE[self::$_tokenKeyName]); setcookie(self::$_tokenKeyName, '', time() - 3600); } return TRUE; }