Сталкивались ли вы с эмоциональным давлением на работе?
Anonymous Poll
48%
Да, сталкивался
19%
Нет, не сталкивался
12%
Я сам манипулятор
0%
Свой вариант (напишу в комментарии)
21%
Посмотреть результаты
❤1
Хорошая структура команды switch
Эта статья обсуждает важные практики и советы по оптимизации и улучшению читаемости конструкции switch. Основные аспекты, поднимаемые в ней:
✔️Пропущенный default: Конструкция switch должна всегда включать default, чтобы предусмотреть обработку случаев, когда ни один из case не совпадает с проверяемым значением.
✔️Дублирование case: Необходимо проверить конструкцию switch на наличие дублирующихся case, которые могут привести к игнорированию некоторых ветвей кода.
✔️Дублирование блоков кода: Повторяющиеся блоки кода в различных ветвях case следует устранить для избежания избыточности и улучшения поддерживаемости кода.
✔️Использование перечислений: В PHP существует поддержка перечислений, которые представляют собой ограниченный набор опций. Их использование может помочь гарантировать, что switch охватывает все возможные ситуации.
Эта статья обсуждает важные практики и советы по оптимизации и улучшению читаемости конструкции switch. Основные аспекты, поднимаемые в ней:
✔️Пропущенный default: Конструкция switch должна всегда включать default, чтобы предусмотреть обработку случаев, когда ни один из case не совпадает с проверяемым значением.
✔️Дублирование case: Необходимо проверить конструкцию switch на наличие дублирующихся case, которые могут привести к игнорированию некоторых ветвей кода.
✔️Дублирование блоков кода: Повторяющиеся блоки кода в различных ветвях case следует устранить для избежания избыточности и улучшения поддерживаемости кода.
✔️Использование перечислений: В PHP существует поддержка перечислений, которые представляют собой ограниченный набор опций. Их использование может помочь гарантировать, что switch охватывает все возможные ситуации.
❤2👍2
Что такое traits?
Traits в PHP - это механизм, который позволяет повторно использовать код в классах без необходимости использования множественного наследования. Traits предоставляют решение для проблемы, когда несколько классов должны иметь одинаковый функционал, но наследование не является подходящим вариантом.
Также traits позволяют разделить функционал, что упрощает структуру кода и делает его более логичным и понятным.
Альтернативным решением для использования функционала traits может быть использование интерфейсов. Однако интерфейсы требуют реализации всех методов, которые определены в интерфейсе, в классе, в то время как трейты могут предоставлять реализацию функционала по умолчанию.
Оба варианта имеют свои преимущества, но трейты в PHP предоставляют большую гибкость при повторном использовании кода в разных классах.
#вопросы_с_собеседований
Traits в PHP - это механизм, который позволяет повторно использовать код в классах без необходимости использования множественного наследования. Traits предоставляют решение для проблемы, когда несколько классов должны иметь одинаковый функционал, но наследование не является подходящим вариантом.
Также traits позволяют разделить функционал, что упрощает структуру кода и делает его более логичным и понятным.
Альтернативным решением для использования функционала traits может быть использование интерфейсов. Однако интерфейсы требуют реализации всех методов, которые определены в интерфейсе, в классе, в то время как трейты могут предоставлять реализацию функционала по умолчанию.
Оба варианта имеют свои преимущества, но трейты в PHP предоставляют большую гибкость при повторном использовании кода в разных классах.
#вопросы_с_собеседований
👍12🥱3❤2
Видео: Использование фейковых объектов вместо моков в автоматизированных тестах
Видео о том, как правильно создать искусственные объекты и использовать их в тестах
Видео о том, как правильно создать искусственные объекты и использовать их в тестах
YouTube
Using fake objects in automated tests
👨💻 Learn Test-Driven Development with Laravel!
https://tddwithlaravel.com
Sign up to 30 Days of Laravel 👉🏻 https://30daysoflaravel.com
👨💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis:
https://subscribe.mateusguimaraes.com…
https://tddwithlaravel.com
Sign up to 30 Days of Laravel 👉🏻 https://30daysoflaravel.com
👨💻 Sign up to my newsletter and receive PHP, JS and Laravel news in a weekly-basis:
https://subscribe.mateusguimaraes.com…
🔥2
Какой пакет/библиотеку вы хотели бы использовать, но не можете найти?🔽🔽🔽
😁2
Антипаттерны модульного тестирования
🧪 Тестирование Приватных/Защищенных Методов:
Приватные методы не следует тестировать напрямую. Тестирование должно проходить косвенно через публичные методы, вызывающие приватные методы.
Сложности при тестировании приватного метода могут указывать на отсутствие абстракции или мертвый код.
🛡️ Нарушение Инкапсуляции в Целях Упрощенных Тестов:
Код не должен изменяться исключительно ради упрощения тестирования. Тесты должны взаимодействовать с кодом точно так, как это происходит в продакшне.
Инкапсуляция является ключевым аспектом качественного кода и его поддержки.
🔍 Разглашение Реализации в Тестах:
Тесты не должны знать о деталях реализации. Они должны фокусироваться на ожидаемых результатах, а не на конкретных алгоритмах или внутренней логике.
Параметризованные тесты могут использоваться для охвата различных сценариев, не раскрывая детали реализации.
🚯 Загрязнение Кода:
Добавление неиспользуемого кода или флагов исключительно для целей тестирования является формой загрязнения кода.
Интерфейсы могут быть выделены и использованы для мокирования вместо добавления лишнего кода только для тестирования.
Статья подчеркивает, что всегда важно учитывать практические решения и в некоторых случаях нарушение правил может быть оправданным. Тем не менее, важно иметь веские причины для таких решений и поддерживать баланс между написанием тестируемого кода и соблюдением хороших программистских практик.
🧪 Тестирование Приватных/Защищенных Методов:
Приватные методы не следует тестировать напрямую. Тестирование должно проходить косвенно через публичные методы, вызывающие приватные методы.
Сложности при тестировании приватного метода могут указывать на отсутствие абстракции или мертвый код.
🛡️ Нарушение Инкапсуляции в Целях Упрощенных Тестов:
Код не должен изменяться исключительно ради упрощения тестирования. Тесты должны взаимодействовать с кодом точно так, как это происходит в продакшне.
Инкапсуляция является ключевым аспектом качественного кода и его поддержки.
🔍 Разглашение Реализации в Тестах:
Тесты не должны знать о деталях реализации. Они должны фокусироваться на ожидаемых результатах, а не на конкретных алгоритмах или внутренней логике.
Параметризованные тесты могут использоваться для охвата различных сценариев, не раскрывая детали реализации.
🚯 Загрязнение Кода:
Добавление неиспользуемого кода или флагов исключительно для целей тестирования является формой загрязнения кода.
Интерфейсы могут быть выделены и использованы для мокирования вместо добавления лишнего кода только для тестирования.
Статья подчеркивает, что всегда важно учитывать практические решения и в некоторых случаях нарушение правил может быть оправданным. Тем не менее, важно иметь веские причины для таких решений и поддерживать баланс между написанием тестируемого кода и соблюдением хороших программистских практик.
🔥5👍2❤1
#дайджест новостей по PHP за неделю:
🔎 PHP 8.1.25 выпущен! — Это релиз с исправлением ошибок.
🔎PHP Annotated — октябрь 2023 г.
🔎 Вышел CakePHP 5.0.2 TranslateBehavior теперь позволяет использовать стиль именования _translations.{locale}.field_name для локали по умолчанию. LoggedQuery::getContext() теперь включает созданный запрос +more.
🔎 PhpStorm 2023.3 EAP #5 — В этой сборке вы можете обнаружить несколько улучшений в различных подсистемах.
🔎Выпущена версия Laravel 10.29 — На этой неделе команда Laravel выпустила версию 10.29 с возможностью просмотра всего промежуточного программного обеспечения в маршруте: список, обновления вывода дампа CLI и многое другое.
🔎Выпущена Symfony 7.0.0-BETA2 — Список наиболее важных изменений с версии 7.0.0-BETA1.
🔎Неделя Symfony #878 (23–29 октября 2023 г.)
🔎 PHP 8.1.25 выпущен! — Это релиз с исправлением ошибок.
🔎PHP Annotated — октябрь 2023 г.
🔎 Вышел CakePHP 5.0.2 TranslateBehavior теперь позволяет использовать стиль именования _translations.{locale}.field_name для локали по умолчанию. LoggedQuery::getContext() теперь включает созданный запрос +more.
🔎 PhpStorm 2023.3 EAP #5 — В этой сборке вы можете обнаружить несколько улучшений в различных подсистемах.
🔎Выпущена версия Laravel 10.29 — На этой неделе команда Laravel выпустила версию 10.29 с возможностью просмотра всего промежуточного программного обеспечения в маршруте: список, обновления вывода дампа CLI и многое другое.
🔎Выпущена Symfony 7.0.0-BETA2 — Список наиболее важных изменений с версии 7.0.0-BETA1.
🔎Неделя Symfony #878 (23–29 октября 2023 г.)
👍7
SOAP-клиент общего назначения для PHP.
Если вам когда-нибудь понадобится иметь дело с SOAP, не используйте неподдерживаемые расширения PHP. Вместо этого попробуйте этот универсальный SOAP-клиент для PHP.
Если вам когда-нибудь понадобится иметь дело с SOAP, не используйте неподдерживаемые расширения PHP. Вместо этого попробуйте этот универсальный SOAP-клиент для PHP.
GitHub
GitHub - phpro/soap-client: A general purpose SOAP client for PHP
A general purpose SOAP client for PHP. Contribute to phpro/soap-client development by creating an account on GitHub.
👍5👾1
Изучение утечек памяти Redis из-за тегов кэша Laravel
В статье рассказывается о проблеме, с которой столкнулась команда разработчиков, использующая фреймворк Laravel для своих проектов. Они обнаружили проблему с ростом использования памяти в Redis кэше из-за неправильного использования функционала тегирования ключей в Laravel Cache.
🕵️ Анализ причины
✔️Неправильное использование тегирования ключей в Laravel Cache.
✔️Создание наборов в Redis для отслеживания ключей по тегам.
✔️Утечки памяти из-за ссылок на ключи в наборах, даже после истечения срока действия (TTL).
🔧 Решение проблемы
✔️Изучение кода библиотеки и замена компонента кэша.
✔️Осознание отсутствия автоматического истечения срока действия для элементов набора в Redis.
✔️Замена стандартного компонента на другой, не использующий тегирование ключей.
В статье рассказывается о проблеме, с которой столкнулась команда разработчиков, использующая фреймворк Laravel для своих проектов. Они обнаружили проблему с ростом использования памяти в Redis кэше из-за неправильного использования функционала тегирования ключей в Laravel Cache.
🕵️ Анализ причины
✔️Неправильное использование тегирования ключей в Laravel Cache.
✔️Создание наборов в Redis для отслеживания ключей по тегам.
✔️Утечки памяти из-за ссылок на ключи в наборах, даже после истечения срока действия (TTL).
🔧 Решение проблемы
✔️Изучение кода библиотеки и замена компонента кэша.
✔️Осознание отсутствия автоматического истечения срока действия для элементов набора в Redis.
✔️Замена стандартного компонента на другой, не использующий тегирование ключей.
👍9
Попробуйте MongoDB в Laravel в один клик через GitHub Codespaces
Эта статья рассказывает о том, как облачные среды разработки, такие как GitHub Codespaces, могут облегчить процесс вступления новых участников в проект и ускорить процесс внесения ими вклада в код при минимальном времени настройки. Она подчеркивает проблемы, связанные с различиями в конфигурациях разработческих окружений, которые могут привести к трате времени на устранение проблем. Рассматривается преимущество использования контейнеризированных окружений разработки, особенно в облачных средах, что делает процесс разработки более удобным и безпрепятственным.
Здесь также приводится пример использования GitHub Codespaces для публикации учебного пособия по интеграции MongoDB в приложение Laravel. Авторы показывают, как можно избежать начальных настроек, позволяя читателям развернуть приложение одним нажатием кнопки и сразу начать работать над кодом. В статье также описывается конфигурация Codespaces, включая использование Docker контейнеров, файлы конфигурации и запуск служб внутри контейнеров.
Эта статья рассказывает о том, как облачные среды разработки, такие как GitHub Codespaces, могут облегчить процесс вступления новых участников в проект и ускорить процесс внесения ими вклада в код при минимальном времени настройки. Она подчеркивает проблемы, связанные с различиями в конфигурациях разработческих окружений, которые могут привести к трате времени на устранение проблем. Рассматривается преимущество использования контейнеризированных окружений разработки, особенно в облачных средах, что делает процесс разработки более удобным и безпрепятственным.
Здесь также приводится пример использования GitHub Codespaces для публикации учебного пособия по интеграции MongoDB в приложение Laravel. Авторы показывают, как можно избежать начальных настроек, позволяя читателям развернуть приложение одним нажатием кнопки и сразу начать работать над кодом. В статье также описывается конфигурация Codespaces, включая использование Docker контейнеров, файлы конфигурации и запуск служб внутри контейнеров.
DEV Community
Try MongoDB and Laravel in 1-click via GitHub Codespaces
Cloud-based development environments can be great platforms to make it easier for new collaborators...
👍3🤔2
Опишите поведение при использовании traits с одинаковыми именами полей и / или методов?
При использовании traits с одинаковыми именами полей и/или методов, возникает конфликт имен, который не позволяет PHP однозначно определить, какое поле или метод должны использоваться.
Если в классе используется несколько traits, и в этих traits есть поля или методы с одинаковыми именами, возникает ошибка компиляции «trait method has not been applied», или «trait field has not been applied». По сути, PHP не знает, из какого trait следует взять поле или метод.
Для разрешения этого конфликта имен трейт может быть использован с использованием псевдонима. Например, можно использовать ключевое слово insteadof, чтобы указать, какой метод или поле должно использоваться
Также в PHP 7.2 была добавлена возможность адаптировать методы или конфликтующие поля с помощью оператора as.
С помощью таких алиасов можно явным образом указать, какой метод или поле следует использовать из каждого трейта.
#вопросы_с_собеседований
При использовании traits с одинаковыми именами полей и/или методов, возникает конфликт имен, который не позволяет PHP однозначно определить, какое поле или метод должны использоваться.
Если в классе используется несколько traits, и в этих traits есть поля или методы с одинаковыми именами, возникает ошибка компиляции «trait method has not been applied», или «trait field has not been applied». По сути, PHP не знает, из какого trait следует взять поле или метод.
Для разрешения этого конфликта имен трейт может быть использован с использованием псевдонима. Например, можно использовать ключевое слово insteadof, чтобы указать, какой метод или поле должно использоваться
Также в PHP 7.2 была добавлена возможность адаптировать методы или конфликтующие поля с помощью оператора as.
С помощью таких алиасов можно явным образом указать, какой метод или поле следует использовать из каждого трейта.
#вопросы_с_собеседований
👍18🥱3❤1
Saloon
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
GitHub
GitHub - saloonphp/saloon: 🤠 Build beautiful API integrations and SDKs with Saloon
🤠 Build beautiful API integrations and SDKs with Saloon - saloonphp/saloon
👍5🥱5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Технократия и hh.ru проанализировали спрос на ИТ-специалистов в России за период с сентября 2022 года по сентябрь 2023 года. Одни из самых востребованных вакансий — системные и бизнес аналитики, менеджеры проектов и продуктов, а также Java-разработчики.
◆Спрос на ИТ-специалистов за год вырос: в сентябре 2022 года на портале hh.ru было открыто 64 тыс. вакансий, а в сентябре 2023 года компании разместили 76 тыс. вакансий. Годовой прирост составил 18%, согласно статистике hh.ru.
◆Активнее других бизнес начал искать аналитиков (системных и бизнесовых), а также менеджеров проектов. За год число размещенных вакансий для этих позиций увеличилось практически в 2 раза.
◆В среднем каждый месяц компании размещают более 9 тысяч вакансий для разработчиков. Практически каждая шестая вакансия — Java-разработчик. Их доля от общего числа вакансий для разработчиков составляет 16%. В первой тройке востребованных стеков также расположились PHP и Python разработчики — 12% и 11% соответственно.
◆Самые активные наниматели айтишников — компании из сферы «Информационные технологии». Но при этом, в первой тройке нанимателей Сбер, Тинькофф и Иннотех — компании из сферы «финансы».
◆Специалистов грейда Junior стали искать на 101% чаще, но в абсолютных значениях бизнесу интересны опытные специалисты уровня Senior — на момент сентября этого года 2,7 тыс. вакансий для Senior против 0,6 тыс. для Junior.
◆По медианным зарплатам лидируют разработчики Ruby on rails — компании готовы платить им 252 000 рублей в месяц. За ними следуют Golang и Java разработчики.
◆Свердловская область в тройке среди регионов нанимателей. Компании из Екатеринбурга и области расположились после Москвы и Санкт-Петербурга.
◆Почти каждая вторая вакансия для ИТ-специалистов предполагает формат удаленной работы: с 25% в 2021 году до 40% в 2023 году.
#карьера #инфографика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱5❤1
Как выдавать себя за пользователей в вашем приложении Laravel
Статья рассказывает о функциональности Laravel Nova, которая позволяет администраторам входить в систему от имени других пользователей для проверки ошибок или исследования проблем.
Здесь описывается установка и использование Laravel Impersonate пакета, который упрощает этот процесс. Чтобы настроить имперсонацию в Laravel приложении, необходимо установить и подключить пакет, добавить несколько маршрутов для имперсонации пользователей, а также использовать Blade хелперы для реализации функционала.
Статья также предоставляет советы по продвинутой настройке, такие как ограничение возможности имперсонации исключительно для администраторов. Автор также дает рекомендацию для использования пакета вместе с Laravel Jetstream и предостерегает от возможных проблем при настройке. В целом, Laravel Impersonate пакет представляет собой удобное решение для входа в систему от имени других пользователей в Laravel приложениях.
Статья рассказывает о функциональности Laravel Nova, которая позволяет администраторам входить в систему от имени других пользователей для проверки ошибок или исследования проблем.
Здесь описывается установка и использование Laravel Impersonate пакета, который упрощает этот процесс. Чтобы настроить имперсонацию в Laravel приложении, необходимо установить и подключить пакет, добавить несколько маршрутов для имперсонации пользователей, а также использовать Blade хелперы для реализации функционала.
Статья также предоставляет советы по продвинутой настройке, такие как ограничение возможности имперсонации исключительно для администраторов. Автор также дает рекомендацию для использования пакета вместе с Laravel Jetstream и предостерегает от возможных проблем при настройке. В целом, Laravel Impersonate пакет представляет собой удобное решение для входа в систему от имени других пользователей в Laravel приложениях.
Laravel News
Learn how to impersonate users in your Laravel app - Laravel News
Laravel Impersonate is a package to allow you to easily set up user impersonation in your Laravel app.
🥱5👍2❤1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🥱4❤1
🔍Здесь рассматривается проблема типизации в приложениях, использующих Query Bus. Query Bus — это шаблон проектирования, который позволяет обрабатывать запросы и возвращать результаты. Проблема заключается в том, что возвращаемый тип данных из Query Bus неопределен, что затрудняет типизацию в приложении.
🔧Для решения этой проблемы автор предлагает использовать дженерики. Они позволяют связывать тип возвращаемого значения Query с типом, который возвращает соответствующий QueryHandler. Таким образом, он предлагает определить интерфейс Query как generic, указав переменный тип T.
Затем типизируется интерфейс QueryBus, указывая, что он принимает объекты типа Query и возвращает объекты типа T. Это позволяет явно указать тип возвращаемого значения из Query Bus.
🔑Наконец, показывается пример конкретного запроса, который также типизируется с использованием generics. Это позволяет автоматически определять тип возвращаемого значения из Query Bus в среде разработки, такой как PHPStorm, облегчая работу с кодом.
🔧Для решения этой проблемы автор предлагает использовать дженерики. Они позволяют связывать тип возвращаемого значения Query с типом, который возвращает соответствующий QueryHandler. Таким образом, он предлагает определить интерфейс Query как generic, указав переменный тип T.
Затем типизируется интерфейс QueryBus, указывая, что он принимает объекты типа Query и возвращает объекты типа T. Это позволяет явно указать тип возвращаемого значения из Query Bus.
🔑Наконец, показывается пример конкретного запроса, который также типизируется с использованием generics. Это позволяет автоматически определять тип возвращаемого значения из Query Bus в среде разработки, такой как PHPStorm, облегчая работу с кодом.
DEV Community
Type hint a Query Bus in PHP
Introduction If we use a Query Bus1 in our application, we usually have an interface that...
👍11🥱4
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Новое в Symfony 6.4: Профилировщик команд и CHIPS сookie
🔎Здесь рассказывается о значительном улучшении Symfony Profiler, одной из любимых функций разработчиков Symfony. Профилировщик собирает всю информацию о HTTP-запросах, позволяя анализировать эти данные при поиске ошибок. В Symfony 6.4 (и 7.0) профилировщик был улучшен таким образом, что теперь он также может профилировать команды, выполняемые в консоли.
👨💻Эта статья объясняет изменения в поддержке сторонних куки в веб-браузерах, начиная с середины 2024 года. Она представляет новую альтернативу под названием CHIPS (Cookies Having Independent Partitioned State), предлагая детали об использовании атрибута Partitioned в HTTP-заголовке Set-Cookie. Этот атрибут Partitioned позволяет хранить куки с использованием двух ключей: ключа хоста (host key) и нового ключа разделения (partition key). Такой подход предотвращает доступ к кукам между различными ресурсами, встроенными в один и тот же сайт, что обеспечивает большую конфиденциальность данных пользователей.
🔎Здесь рассказывается о значительном улучшении Symfony Profiler, одной из любимых функций разработчиков Symfony. Профилировщик собирает всю информацию о HTTP-запросах, позволяя анализировать эти данные при поиске ошибок. В Symfony 6.4 (и 7.0) профилировщик был улучшен таким образом, что теперь он также может профилировать команды, выполняемые в консоли.
👨💻Эта статья объясняет изменения в поддержке сторонних куки в веб-браузерах, начиная с середины 2024 года. Она представляет новую альтернативу под названием CHIPS (Cookies Having Independent Partitioned State), предлагая детали об использовании атрибута Partitioned в HTTP-заголовке Set-Cookie. Этот атрибут Partitioned позволяет хранить куки с использованием двух ключей: ключа хоста (host key) и нового ключа разделения (partition key). Такой подход предотвращает доступ к кукам между различными ресурсами, встроенными в один и тот же сайт, что обеспечивает большую конфиденциальность данных пользователей.
👍7