/** * Sets the expiration of the section or specific variables. * @param string|int|DateTime time, value 0 means "until the browser is closed" * @param mixed optional list of variables / single variable to expire * @return self */ public function setExpiration($time, $variables = NULL) { $this->start(); if (empty($time)) { $time = NULL; $whenBrowserIsClosed = TRUE; } else { $time = NDateTime53::from($time)->format('U'); $max = ini_get('session.gc_maxlifetime'); if ($time - time() > $max + 3) { // bulgarian constant trigger_error("The expiration time is greater than the session expiration $max seconds", E_USER_NOTICE); } $whenBrowserIsClosed = FALSE; } if ($variables === NULL) { // to entire section $this->meta['']['T'] = $time; $this->meta['']['B'] = $whenBrowserIsClosed; } elseif (is_array($variables)) { // to variables foreach ($variables as $variable) { $this->meta[$variable]['T'] = $time; $this->meta[$variable]['B'] = $whenBrowserIsClosed; } } else { // to variable $this->meta[$variables]['T'] = $time; $this->meta[$variables]['B'] = $whenBrowserIsClosed; } return $this; }
/** * Date/time formatting. * @param string|int|DateTime * @param string * @return string */ public static function date($time, $format = NULL) { if ($time == NULL) { // intentionally == return NULL; } if (!isset($format)) { $format = self::$dateFormat; } $time = NDateTime53::from($time); return NStrings::contains($format, '%') ? strftime($format, $time->format('U')) // formats according to locales : $time->format($format); // formats using date() }
/** * Sends a cookie. * @param string name of the cookie * @param string value * @param string|int|DateTime expiration time, value 0 means "until the browser is closed" * @param string * @param string * @param bool * @param bool * @return NHttpResponse provides a fluent interface * @throws InvalidStateException if HTTP headers have been sent */ public function setCookie($name, $value, $time, $path = NULL, $domain = NULL, $secure = NULL, $httpOnly = NULL) { if (headers_sent($file, $line)) { throw new InvalidStateException("Cannot set cookie after HTTP headers have been sent" . ($file ? " (output started at $file:$line)." : ".")); } setcookie( $name, $value, $time ? NDateTime53::from($time)->format('U') : 0, $path === NULL ? $this->cookiePath : (string) $path, $domain === NULL ? $this->cookieDomain : (string) $domain, $secure === NULL ? $this->cookieSecure : (bool) $secure, $httpOnly === NULL ? $this->cookieHttpOnly : (bool) $httpOnly ); return $this; }
/** * Enables log out after inactivity. * @param string|int|DateTime Number of seconds or timestamp * @param int Log out when the browser is closed | Clear the identity from persistent storage? * @return self */ public function setExpiration($time, $flags = 0) { $section = $this->getSessionSection(TRUE); if ($time) { $time = NDateTime53::from($time)->format('U'); $section->expireTime = $time; $section->expireDelta = $time - time(); } else { unset($section->expireTime, $section->expireDelta); } $section->expireIdentity = (bool) ($flags & self::CLEAR_IDENTITY); $section->expireBrowser = (bool) ($flags & self::BROWSER_CLOSED); $section->browserCheck = TRUE; $section->setExpiration(0, 'browserCheck'); $section->setExpiration($time, 'foo'); // time check return $this; }
private function completeDependencies($dp, $data) { if (is_object($data)) { $dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkSerializationVersion'), get_class($data), NClassReflection::from($data)->getAnnotation('serializationVersion')); } // convert expire into relative amount of seconds if (isset($dp[NCache::EXPIRATION])) { $dp[NCache::EXPIRATION] = NDateTime53::from($dp[NCache::EXPIRATION])->format('U') - time(); } // convert FILES into CALLBACKS if (isset($dp[self::FILES])) { //clearstatcache(); foreach (array_unique((array) $dp[self::FILES]) as $item) { $dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkFile'), $item, @filemtime($item)); // @ - stat may fail } unset($dp[self::FILES]); } // add namespaces to items if (isset($dp[self::ITEMS])) { $dp[self::ITEMS] = array_unique((array) $dp[self::ITEMS]); foreach ($dp[self::ITEMS] as $k => $item) { $dp[self::ITEMS][$k] = $this->namespace . md5(is_scalar($item) ? $item : serialize($item)); } } // convert CONSTS into CALLBACKS if (isset($dp[self::CONSTS])) { foreach (array_unique((array) $dp[self::CONSTS]) as $item) { $dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkConst'), $item, constant($item)); } unset($dp[self::CONSTS]); } if (!is_array($dp)) { $dp = array(); } return $dp; }
/** * Sets the amount of time allowed between requests before the session will be terminated. * @param string|int|DateTime time, value 0 means "until the browser is closed" * @return NSession provides a fluent interface */ public function setExpiration($time) { if (empty($time)) { return $this->setOptions(array( 'gc_maxlifetime' => self::DEFAULT_FILE_LIFETIME, 'cookie_lifetime' => 0, )); } else { $time = NDateTime53::from($time)->format('U') - time(); return $this->setOptions(array( 'gc_maxlifetime' => $time, 'cookie_lifetime' => $time, )); } }
/** * Restricts the search by modified time. * @param string "[operator] [date]" example: >1978-01-23 * @param mixed * @return NFinder provides a fluent interface */ public function date($operator, $date = NULL) { if (func_num_args() === 1) { // in $operator is predicate if (!preg_match('#^(?:([=<>!]=?|<>)\s*)?(.+)$#i', $operator, $matches)) { throw new InvalidArgumentException('Invalid date predicate format.'); } list(, $operator, $date) = $matches; $operator = $operator ? $operator : '='; } $date = NDateTime53::from($date)->format('U'); return $this->filter(create_function('$file', 'extract(NCFix::$vars['.NCFix::uses(array('operator'=>$operator,'date'=> $date)).'], EXTR_REFS); return NFinder::compare($file->getMTime(), $operator, $date); ')); }
/** * Enables log out after inactivity. * @param string|int|DateTime number of seconds or timestamp * @param bool log out when the browser is closed? * @param bool clear the identity from persistent storage? * @return NUser provides a fluent interface */ public function setExpiration($time, $whenBrowserIsClosed = TRUE, $clearIdentity = FALSE) { $section = $this->getSessionSection(TRUE); if ($time) { $time = NDateTime53::from($time)->format('U'); $section->expireTime = $time; $section->expireDelta = $time - time(); } else { unset($section->expireTime, $section->expireDelta); } $section->expireIdentity = (bool) $clearIdentity; $section->expireBrowser = (bool) $whenBrowserIsClosed; $section->browserCheck = TRUE; $section->setExpiration(0, 'browserCheck'); return $this; }