Друзья, и так:
Параллельно запостил тут
yiiframework.ru/forum
Две недели прошло, и тут и там однозначного мнения как реализовать этот функционал нет. Я решил вопрос так:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
class MainController extends Controller
{
public function init()
{
parent::init();
$this->__TOKEN();
}
public function mainToken( $token = null )
{
$session = $this->openSession();
if ( isset($token) )
{
$_SESSION['__TOKEN'][0] = $token;
$_SESSION['__TOKEN'][1] = 0;
}
return $_SESSION['__TOKEN'][0];
}
public function openSession()
{
$session = Yii::$app->session;
if ( !$session->isActive ) $session->open();
return $session;
}
protected function __TOKEN()
{
$session = $this->openSession();
isset ($_SESSION['__TOKEN'][1] ) ? $_SESSION['__TOKEN'][1]++ : $_SESSION['__TOKEN'][1] = 0;
if ( $_SESSION['__TOKEN'][1] > 1 )
{
$_SESSION['__TOKEN'][0] = null;
$_SESSION['__TOKEN'][1] = 0;
}
}
}
$this->mainToken() - читаем токен;
$this->mainToken('string') - пишем токен;
Жизненный цикл mainToken - 1 запрос, независимо от того прочитали ли мы токен или нет – token почистится.
От MainController можно расширяться и строить дальнейшую логику приложения. Как то так...