/** * Clear all expired data from current application */ public function actionClearExpired() { // Die script every time // This condition for database connection $timerExitPeriod = 2 * 60 * 60; // 2 hours $startTimeProcess = microtime(true); $loop = \React\EventLoop\Factory::create(); // Every hour clear expired user tokens $loop->addPeriodicTimer(3600, function () use($timerExitPeriod, $startTimeProcess) { if (microtime(true) - $startTimeProcess >= $timerExitPeriod) { exit(self::EXIT_CODE_NORMAL); } $timeStart = microtime(true); $this->stdout('Start clearing expired tokens:' . PHP_EOL); $this->stdout(' -> Current memory usage: ' . number_format(memory_get_usage() / 1024, 3) . 'K.' . PHP_EOL); $countDeleted = UserToken::deleteAll('expired_at <= NOW()'); $this->stdout('Finished clearing expired tokens:' . PHP_EOL); $this->stdout(' -> Deleted rows count ' . $countDeleted . '.' . PHP_EOL); $this->stdout(' -> Current memory usage: ' . number_format(memory_get_usage() / 1024, 3) . 'K.' . PHP_EOL); $this->stdout(' -> ' . (microtime(true) - $timeStart) . ' elapsed seconds.' . PHP_EOL); }); $loop->run(); }
/** * @inheritdoc */ public function run() { if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id); } /** @var $request \yii\web\Request */ $request = Yii::$app->getRequest(); $rememberValue = $request->getBodyParam($this->rememberField); $verifyIP = $request->getBodyParam($this->verifyIpField) == $this->verifyIpYesValue; switch ($rememberValue) { case $this->rememberYesValue: $remember = true; $seconds = $this->expireSecondsRemember; break; case $this->rememberNoValue: $remember = false; $seconds = $this->expireSecondsNotRemember; break; default: $remember = false; $seconds = UserToken::EXPIRE_DEFAULT_SECONDS; } /* @var $model \common\models\UserToken */ $model = UserToken::createForUser(Yii::$app->user->identity, $seconds, $remember, $verifyIP); if ($model) { $response = Yii::$app->getResponse(); $response->setStatusCode(201); $id = implode(',', array_values($model->getPrimaryKey(true))); $response->getHeaders()->set('Location', Url::toRoute([$this->viewAction, 'id' => $id], true)); } elseif (!$model->hasErrors()) { throw new ServerErrorHttpException('Failed to create user token.'); } return UserToken::findOne($model->primaryKey); }