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; }
/** * セッションデータデーブルからデータを取得し復元する * @param string セッションデータのプライマリーキー */ protected static function _initializeData($argPKey) { if (NULL === self::$_sessionData) { $binds = array(self::$_sessionDataPKeyName => $argPKey, 'expierddate' => Utilities::modifyDate('-' . (string) self::$_expiredtime . 'sec', 'Y-m-d H:i:s', NULL, NULL, 'GMT')); $Session = ORMapper::getModel(self::$_DBO, self::$_sessionDataTblName, '`' . self::$_sessionDataPKeyName . '` = :' . self::$_sessionDataPKeyName . ' AND `' . self::$_sessionDataDateKeyName . '` >= :expierddate ORDER BY `' . self::$_sessionDataDateKeyName . '` DESC limit 1', $binds); if (strlen($Session->{self::$_sessionDataPKeyName}) > 0) { self::$_sessionData = json_decode($Session->{self::$_serializeKeyName}, TRUE); } else { // 配列に初期化 self::$_sessionData = array(); } } return TRUE; }