# Хранилище пар «ключ-значение»

Хранилище пар «ключ-значение» Plesk используется для хранения настроек пользователя или секретных ключей. Для доступа к хранилищу пар «ключ-значение» Plesk используйте класс pm_Settings. Ключи и значения хранятся в контексте расширения.

Если вам надо присвоить значение, используйте метод

- set()

    pm_Settings::set('authToken', $authToken);

Особый случай:

    pm_Settings::set('something', null);

Примечание

До Plesk 17.0 такая инструкция привела бы к выдаче исключения. Начиная с Plesk 17.0, эта инструкция приведет к удалению соответствующего элемента из хранилища пар «ключ-значение».

Теперь вы можете получить значение этой переменной, используя метод

- get()

    $authToken = pm_Settings::get('authToken');

Можно использовать необязательный параметр, чтобы указать значение, которое будет возвращено по умолчанию в случае, если соответствующий ключ не найден:

    $message = pm_Settings::get('message', 'default message');

Чтобы получить доступ к этим значениям в каком-либо месте кода, сначала инициализируйте контекст:

    pm_Context::init('extension-id');

Необходимо инициализировать контекст в следующих местах кода:

- Планировщик задач.
- Пред-/послеустановочные скрипты
- Обработчики событий

# Шифрование данных

Хранилище пар «ключ-значение» позволяет хранить и получать данные в зашифрованном виде.

Примечание

Настоятельно рекомендуем вам использовать именно этот подход при работе с конфиденциальными данными, такими, как учетные данные пользователя и так далее.

- Метод setEncrypted() сохраняет зашифрованные данные в хранилище пар «ключ-значение».

    pm_Settings::setEncrypted('secretValue', $secretValue);

- Метод getDecrypted() получает зашифрованное значение из хранилища пар «ключ-значение».

    $secretValue = pm_Settings::getDecrypted('secretValue');

# Очистка хранилища пар «ключ-значение»

Начиная с Plesk 12.5, стало возможным очистить настройки расширения с помощью метода clean(). Вы можете использовать его для добавления кнопки Вернуться к значениям по умолчанию в интерфейсе вашего расширения.

# Комментарии

## Ограничение длины значения – 2000 символов.

Ограничение длины строки сохраненного значения – 2000 символов.

Меры предосторожности:

- Избегайте хранения значений, длина которых больше 2000 символов.

  Примечание

  В версиях Plesk ниже 17.0 сохраняются только первые 2000 символов, остальные символы обрезаются. Начиная с Plesk 17.0, такое значение вообще не будет сохранено, и будет выдано исключение.

- Избегайте хранения значений, которые имеют тенденцию расти по длине, как, например, список доменов в виде строки JSON.

Советы по тестированию:

- Проверяйте длину значений, сохраняемых расширением.
- Для сохраненных значений длиной около 2000 символов, удостоверьтесь в том, что расширение должным образом проверяет, что значение имеет допустимую длину.
- Тестируйте расширение на нескольких доменах или в схожих условиях (умножая количество сущностей), в зависимости от функциональности расширения.

## Значения сохраняются в виде обычного текста

Данные, сохраненные в хранилище пар «ключ-значение», хранятся в виде обычного текста, без шифрования.

Избегайте хранения конфиденциальной информации.

## Хранилище пар «ключ-значение» сохраняется и восстанавливается как часть резервной копии сервера

Хранилище пар «ключ-значение» Plesk сохраняется как часть резервной копии сервера. Таким образом, восстановление сервера Plesk из резервной копии может привести к откату некоторых или всех изменений данных хранилища, выполненных расширением.

Советы по тестированию:

Проверьте, что расширение ведет себя правильно после восстановления сервера. Например, создайте резервную копию, удалите некоторые элементы, связанные с расширением, из хранилища пар «ключ-значение», восстановите сервер из резервной копии и удостоверьтесь в том, что расширение работает так, как ожидается.

## Используйте GUID объектов Plesk

Чтобы гарантировать отсутствие конфликтов между объектами, используйте GUID объектов Plesk (или ID, если GUID недоступны), чтобы однозначно идентифицировать домены, пользователей и т.д. Это поможет безопасно разрешить ситуацию, когда какой-либо объект удаляется из системы одним пользователем, а затем создается под тем же именем другим пользователем.

Советы по тестированию:

Проверьте, что GUID используются как идентификаторы объектов.

## Очистка хранилища пар «ключ-значение» при удалении расширения

Хранилище пар «ключ-значение» автоматически очищается при удалении расширения. Вам необязательно делать это самостоятельно в скрипте `pre-uninstall.php`.