2017-11-01 10 views
0

現在、Yii2アプリケーションと並行してCraftアプリケーションを実行しようとしています。私は正しい時間に正しいアプリケーションのブートストラップを持っているが、セッションの問題を書くことに走っている。コントローラのアクションが終了した後にYii2セッションが失われる

セッションをローカルファイル(デフォルトのapache2ファイル)に書き込んでいます。

何かの理由で、Yii2アプリで$_SESSION['something'] = 'test';を使用してセッションに変数を追加しようとすると、アプリがシャットダウンすると利用できなくなります。

私はこの「何か」キーをYii2のセッションに追加し、約3秒後にCraftアプリでセッション変数にアクセスしようとしています。

このセッション変数が失われている理由はありますか?私がYii2アプリケーションから戻る前に$ _SESSIONをプリントアウトすると、それはそこにありますが、アクションが終了した後にセッションから失われますか?

私のコントローラの実行が終了方法がこれです:

 //Setup for the return of JSON. 
     \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
     header('Content-type: application/json'); 

     $returnData = self::filterOutSensitiveResponseInfo($returnData); 

     //Get timeouts for the front-end. 
     $returnData = [ 
      "responseData" => $returnData 
     ]; 

     //Handle logging of the return from controller. 
     if(self::includeCurrentActionInLogs()){ 
      self::logActionTiming();   
      self::logActionResponse($returnData); 
     } 

     //output JSON to the front-end. 
     echo json_encode($returnData, JSON_PRETTY_PRINT); 

     //Handle successful shutdown of the application. 
     \Yii::$app->end(); 
     return; 

このコードは、私はすぐに別のコントローラのアクションを呼び出し、$ _SESSIONを見ているが、私は以前に格納されたその変数が存在しなくなったよ実行完了したら?

EDIT ::私は、問題は、これらの設定であると思い ::

session.cooke_secure ON 
session.name = CraftSessionId 
session.cookie_httponly ON 

^これらは、これらがYii2ための設定です^ CraftCMS

session.cooke_secure OFF 
session.name = PHPSessionId 
session.cookie_httponly OFF 

ための設定です。

どのようにこれらの設定をCraftに合わせて変更できますか?私が今までCraftCmsを使用していないが、私は、問題は、この行であることを考える

答えて

0

:ドキュメントが言うように

\Yii::$app->end(); 

この機能を本番モードでの結果では、exit()またはdie()

に等しくなります。

シャットダウン関数とオブジェクトデストラクタは、出口が呼び出されると常に でも実行されます。

それは、これらの機能 を実行した後も実行されたことを意味します。私はこの問題を解決することができた

//Setup for the return of JSON. (!!!) This two lines are equal 
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
    header('Content-type: application/json'); 

    $returnData = self::filterOutSensitiveResponseInfo($returnData); 

    //Get timeouts for the front-end. 
    $returnData = [ 
     "responseData" => $returnData 
    ]; 

    //Handle logging of the return from controller. 
    if(self::includeCurrentActionInLogs()){ 
     self::logActionTiming(); 
     self::logActionResponse($returnData); 
    } 

    return json_encode($returnData, JSON_PRETTY_PRINT); 
0

session_write_close(); 

をそうするようにコードを変更してみてください。

CraftCMSはsession.nameを利用していましたが、PHPSESSIDの代わりにCraftSessionIdに設定されています。これはYIIのデフォルト値です。これは、Craft内からYII2セッションデータを取得しようとするときに問題を引き起こしていました。

craftcms general.phpに'phpSessionName' => 'PHPSESSID',を追加して解決しました。

関連する問題