В настоящее время я переношу старый веб-сайт Zend 1.1, и мне нужна замена для использования Zend_Session_Namespace.
Существует ли такой для Yii2? Или в качестве альтернативы есть плагин или что-то еще, чтобы добавить эту функциональность?
-Редактировать: В частности, возможность устанавливать тайм-ауты истечения срока действия и ограничения переходов, как у Zend.
Спасибо.





Информация, которую вы добавили в редактирование, никогда не упоминалась ранее и делает ваш вопрос слишком широким, вы можете создать для этого отдельный вопрос.
По умолчанию данные сеанса хранятся в файлах. Реализация блокирует файл от открытия сеанса до момента его закрытия либо session_write_close() (в Yii это можно сделать как Yii::$app->session->close()), либо в конце запроса. Пока файл сеанса заблокирован, все другие запросы, которые пытаются использовать тот же сеанс, блокируются, т.е. ожидают исходного запроса на освобождение файла сеанса. это может работать для разработчиков или небольших проектов. Но когда дело доходит до обработки массивных одновременных запросов, лучше использовать более сложное хранилище, например базу данных.
Экземпляры Zend_Session_Namespace предоставляют основной API для управления данными сеанса в Zend Framework. Пространства имен используются для разделения всех данных сеанса, если вы конвертируете скрипт в платформу Yii2, вам может потребоваться изучить https://www.yiiframework.com/doc/api/2.0/yii-веб-сеанс.
Простой пример для сравнения обеих функций на примере:
$defaultNamespace = new Zend_Session_Namespace('Default');
if (isset($defaultNamespace->numberOfPageRequests)) {
// this will increment for each page load.
$defaultNamespace->numberOfPageRequests++;
} else {
$defaultNamespace->numberOfPageRequests = 1; // first time
}
echo "Page requests this session: ",
$defaultNamespace->numberOfPageRequests;
public function actionIndex()
{
$session = new \yii\web\Session();
$session->open();
$visits = $session->get('visits', 0);
$visits = $visits+1;
$session->set('visits', $visits);
return "Total visits $visits";
}
@TrevorD редактирование вашего вопроса вам не поможет, поскольку вы уже отметили ответ, вам следует добавить отдельный вопрос и можете передать этот вопрос в качестве предварительного запроса для тех, кто может вам помочь.
Спасибо. Ваш ответ в основном решает мою проблему, несмотря на то, что вопрос слишком широкий. Я отредактирую свой вопрос, но вам не нужно редактировать свой ответ, так как он все еще очень полезен.