2015-01-29 2 views
0

인증 및 대부분의 읽기/업데이트 요청을 포함하여 외부 API를 통해 대부분의 작업을 수행하는 Yii2 응용 프로그램이 있습니다.Yii2에서 세션 재생성 사용 안 함

로그인 후 세션에 암호화 된 값을 저장하고 암호화 키를 쿠키에 저장합니다.

쿠키 (또는 세션?)는 30 분 이상 사용하지 않으면 만료됩니다.하지만 세션은 자동으로 재생성되며 (사용자는 로그인하라는 메시지가 표시되지 않습니다), 이지만 값 검색은 다음과 같습니다. 부서진.

주요 문제는 재현하기 어렵다는 것입니다 (일반적으로 밤에 페이지가 열리면 발생합니다).

가 나는 설정 모두 나에게을 기억하고 쿠키 0 시간 만료하지만 해결해야 할 더 많은 옵션이있는 것 같습니다있다.

다음은 세션의 데이터를 저장/검색하는 함수입니다.

public static function storeData($stored_data) 
    { 
     $security = Yii::$app->getSecurity(); 
     $key = $security->generateRandomKey(); 
     $encrypted = $security->encryptByKey($stored_data, $key); 

     Yii::$app->getSession()->set('stored_data', $encrypted); 
     Yii::$app->response->cookies->add(new Cookie([ 
      'name' => 'key', 
      'value' => $key, 
      //'expire' => time() + 60*60*24*30, 
     ])); 
    } 


    private static function getData() 
    { 
     $security = Yii::$app->getSecurity(); 
     $encrypted = Yii::$app->getSession()->get('stored_data'); 
     $key = Yii::$app->request->cookies->get('key'); 

     $stored_data= $security->decryptByKey($encrypted, $key); 

     return $stored_data; 
    } 

답변

0

대신 사용/main.php

return array(
    'components'=>array(
     'request'=>array(
      'enableCookieValidation'=>true, 
     ), 
    ), 
); 

받기 자세한 내용은 here 당신의

public static function storeData($stored_data) 
{ 
    $security = Yii::$app->getSecurity(); 
    $key = $security->generateRandomKey(); 
    $encrypted = $security->encryptByKey($stored_data, $key); 

    Yii::$app->getSession()->set('stored_data', $encrypted); 
    $cookie = new CHttpCookie([ 
     'name' => 'key', 
     'value' => $key, 
    ]); 
    $cookie->expire = time()+60*60*24*180; 
    Yii::app()->request->cookies['key'] = $cookie; 
    Yii::$app->response->cookies->add(Yii::app()->request->cookies['key']); 
} 

의 그리고 당신의 설정 안쪽이 쿠키 생성 코드는

+0

코드는 혼합처럼 보인다 Yii1 및 Yii2 코드. 질문은 Yii2에 관한 것입니다. – arogachev

+0

내가 공유 한 링크를 따라 보셨습니까? Yii 2 전용 –

+0

죄송합니다. 귀하의 답변에서 약간 분명하지 않습니다. – arogachev