Ejemplo n.º 1
0
 /**
  * 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();
 }
Ejemplo n.º 2
0
 /**
  * @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);
 }