2017-12-01 9 views
0
public function behaviors() 
    { 
     return [ 
      'rateLimiter' => [ 
      'class' => \yii\filters\RateLimiter::className(), 
      'enableRateLimitHeaders' =>false 
     ], 
    ]; 
    } 

public function getRateLimit($request, $action) 
    { 
     // 6 - кол-во 
     // 10 - это секунды 
     return [6, 10]; 
    } 

    public function loadAllowance($request, $action) 
    { 
     return [$this->allowance, $this->allowance_updated_at]; 
    } 

    /** 
    * Метод сохранит в кеш 
    * @param \yii\web\Request $request 
    * @param \yii\base\Action $action 
    * @param int $allowance 
    * @param int $timestamp 
    */ 
    public function saveAllowance($request, $action, $allowance, $timestamp) 
    { 
     $this->allowance = $allowance; 
     $this->allowance_updated_at = $timestamp; 
     $this->save(); 
    } 

요점은 세션을 사용하지 않고도 Android 애플리케이션에서 로깅이 발생하고 있다는 것입니다. 로그인 한 사용자의 ID 인 응답 토큰으로 보냄.수행 방법 로그인하지 않은 사용자의 속도 제한은 무엇입니까?

+0

위의 코드가 작동합니까? 너 뭔가 특별한 걸로 붙어 있니? –

+0

이 세 가지 방법이 작동하지 않습니다. – Pasha

답변

0
  1. 쿠키의 도움을받을 수 있습니다. 안드로이드 애플 리케이션에서 쿠키가 작동하는 방법을 잘 모르겠습니다. 임시 파일을 선택할 수 있습니다.

  2. 로그인하지 않은 사용자의 IP를 기록하고 한도를 유지하려는 경우 데이터베이스에 보관할 수 있습니다.

그러나 위의 방법 중 하나로 쿠키/임시 파일이나 IP를 삭제하면 사용자가 제한을 무시할 수 있습니다.

관련 문제