Cookies — данные, которые нам отдает сервер, чтобы при дальнейших запросах мы их вернули. Это может использоваться для:
⚙️ аутентификации пользователя;
⚙️ определения сессий (например, мы определяем, что пользователь открыл приложении и пользуется им);
⚙️ хранение каких-либо данных (например, корзины).
Давайте рассмотрим, как мы можем с ними работать на Flutter.
Если мы используем пакет http или его производные, то нам понадобится библиотека cookie_jar. В случае работы с dio, есть dio_cookie_manager. Работают они одинаково — вторая библиотека это надстройка над первой.
Сначала нужно определить, как будут храниться наши Cookie. Существует 2 варианта — обычный
CookieJar, который сохраняет в ОЗУ, и PersistentCookieJar, который сохраняет в постоянную память.Давайте создадим PersistentCookieJar и добавим его к dio:
Future<void> prepareJar() async {
final Directory appDocDir = await getApplicationDocumentsDirectory();
final String appDocPath = appDocDir.path;
final jar = PersistCookieJar(
ignoreExpires: true,
storage: FileStorage(appDocPath + "/.cookies/"),
);
dio.interceptors.add(CookieManager(jar));
}
Так мы получаем путь к любому месту хранения, но рекомендую использовать папку приложения, и в ней создавать папку
/.cookies/, чтобы директория была скрыта от посторонних глаз.Если установлен параметр
ignoreExpires, то значит приложение или библиотека игнорируют срок годности Cookie и продолжают его использовать, даже если он истек.Делитесь в чате, добавляли работу с Cookies на своих проектах?
