Что эквивалентно ngcookie AngularJS в Angular 6?

Как вы можете создавать файлы cookie в Angular 6? Для AngularJS было ngcookie. Каков эквивалентный способ создания файлов cookie в Angular 6?


person Akshay Sharma    schedule 09.06.2018    source источник
comment
Я немного озадачен тем, почему этот вопрос был закрыт. Это правильный, лаконичный вопрос, за который многие люди проголосовали за совершенно правильные ответы. Моддинг здесь иногда напоминает снайперов, которым не сказали, что война окончена. Просто спуститесь с деревьев, ребята   -  person Peter Nixey    schedule 13.07.2020
comment
@PeterNixey То, что многие люди проголосовали/ответили, не обязательно означает, что сам вопрос хорош. Если оставить такие вопросы открытыми, это посылает новым пользователям сообщение о том, что такие несфокусированные вопросы, как «Как мне сделать Х» без демонстрации самоанализа или попыток решения, являются нормальными и актуальными. Многие люди нарушают ограничения скорости, но это не делает превышение скорости хорошим.   -  person Remy    schedule 13.07.2020
comment
@remy, это разумно, но я не понимаю, почему вопрос выходит за пределы ограничения скорости. Он невероятно специфичен — он ссылается на конкретную утилиту в AngularJS и спрашивает, что эквивалентно в Angular 6. Мой первоначальный вопрос был немного легкомысленным, но я искренне не понимаю, как это не сфокусировано.   -  person Peter Nixey    schedule 13.07.2020
comment
@PeterNixey Я понимаю вашу точку зрения, что расфокусировка не является подходящей близкой причиной, и согласен (это действительно конкретно). Однако, поскольку мы (обычные пользователи) не можем изменить причину закрытия, я все же проголосовал за то, чтобы оставить его закрытым по вышеуказанным причинам. (Я бы, вероятно, лично обратился за деталями отладки, поскольку, похоже, не было предпринято никаких усилий для ее решения, прежде чем спрашивать). Но я думаю, что ваше поднятое замечание, безусловно, справедливо.   -  person Remy    schedule 13.07.2020


Ответы (4)


Вы можете использовать этот пакет узлов для него

ngx-cookie-service

person Rajani Kanth    schedule 09.06.2018
comment
В angular вы можете просто использовать локальное хранилище, например localStorage.setItem(key,value); - person Tuvia Khusid; 13.08.2019
comment
Вы можете сделать это, но что, если вы хотите, чтобы значение сохранялось примерно 10 минут, а затем исчезало? Локальное хранилище не сделает этого. - person Mikefox2k; 13.09.2019

  1. npm install ngx-cookie-service --save
  2. Добавьте в свой модуль: import { CookieService } from 'ngx-cookie-service';
  3. Добавьте CookieService к провайдерам модуля.
  4. Вставьте его в свой конструктор.
  5. Используйте cookie.get(nameOfCookie) для получения определенного файла cookie, используйте cookie.set(nameOfCookie,cookieValue) для добавления нового файла cookie.
person M.Laida    schedule 28.06.2018
comment
Я полагаю, вы забыли упомянуть о добавлении его в модуль приложения. В своем @NgModule добавьте его как провайдера providers: [ CookieService ] - person CodeWarrior; 24.08.2018
comment
[ts] Не удается найти модуль «ngx-cookie-service». [2307] я пытаюсь выполнить npm, затем ионную подачу, затем возникает ошибка - person saber tabatabaee yazdi; 09.02.2019
comment
@CodeWarrior Начиная с angular 5 (или 6) и далее вам не нужно добавлять услугу в провайдеров. - person Manos Kounelakis; 29.05.2019
comment
@ManosKoonelakis Да, приятель, я использовал Angular 4, когда писал этот комментарий. - person CodeWarrior; 31.05.2019

Прежде всего, вы должны спросить себя: Действительно ли мне нужны файлы cookie?:

Файлы cookie когда-то использовались для общего хранения данных на стороне клиента. Хотя это было законно, когда они были единственным способом хранения данных на клиенте, в настоящее время рекомендуется предпочесть современные API-интерфейсы хранения. Файлы cookie отправляются с каждым запросом, поэтому они могут снизить производительность (особенно для мобильных подключений для передачи данных). Современные API для клиентского хранилища — это API веб-хранилища (localStorage и sessionStorage) и IndexedDB. (Источник: MDN)

Итак, если вы еще этого не сделали, вы можете прочитать о Web Вместо этого API хранилища.

Если вы хотите продолжить использование файлов cookie, читайте дальше.

Я попробовал ngx-cookie-service, и это не сработало для меня. У меня возникала проблема за проблемой, в итоге я обсудил ее на github, попытался обновить пакеты. Мне потребовалось около дня, чтобы понять, что то, что мне нужно, не должно быть таким сложным, ведь получение/установка файлов cookie — это просто встроенная функция javascript.

У меня больше не было времени терять, и я написал это простое CookieService сам. И я просто хотел поделиться этим с другими отчаянными разработчиками. :)

Простой CookieService

Я создал этот gist , который является облегченной альтернативой ngx-cookie-service.

Настройка и использование

Конечно, вам нужно зарегистрировать его в вашем файле app.module.ts. Добавьте его в список ваших провайдеров:

providers: [FooService, BarService, CookieService]

Затем используйте его в своих компонентах, например. следующим образом:

private _sessionId: string;

constructor(private cookieService: CookieService) {
  this._sessionId = cookieService.get("sessionId");
}

public set sessionId(value: string) {
  this._sessionId = value;
  this.cookieService.set("sessionId", value);
}

Обратите внимание, что вы можете использовать инструменты отладки, чтобы убедиться, что файл cookie действительно установлен, и убедиться, что он присутствует в последующих HTTP-запросах. (скриншоты Chrome, но Firefox и Edge имеют похожие обзоры)

файл cookie установлен

используя куки

person bvdb    schedule 05.01.2019
comment
Я пытался использовать это, чтобы получить значение файла cookie, но получил для него неправильное значение. Правильный файл cookie был установлен в запросе на получение через withCredentials: true . Мне нужно значение файла cookie, чтобы я мог отправить его в заголовке почтового запроса. Я знаю, что отправляю правильный файл cookie, который автоматически устанавливается с помощью withCredentials, но мне нужно отправить заголовок со значением файла cookie. - person danny gonzalez; 10.01.2019
comment
@dannygonzalez Я предполагаю, что вы проверили это с помощью инструментов отладки веб-браузера. Но на случай, если вы этого не сделали, я добавил несколько скриншотов, как вы можете это проверить. - Не уверен, что это полезно для вас, хотя. - person bvdb; 11.01.2019
comment
Спасибо. В моем случае я хочу прочитать заголовки ответа HTTP исходного запроса страницы, которые, я полагаю, невозможно прочитать (stackoverflow.com/questions/58950016/). Что я собираюсь сделать, так это отправить файл cookie, прочитать его в приложении, используя document.cookies. Я полагаю, что не могу сделать это с помощью localStorage или sessionStorage, потому что мне все равно придется отправить значение, которое я хочу сохранить в виде файла cookie. Не так ли? - person Manu Chadha; 20.11.2019
comment
Пожалуйста, НЕ используйте Localstorage для конфиденциальных данных, таких как токены сеанса — их можно украсть с помощью простой атаки с использованием межсайтовых сценариев. Файлы cookie могут быть пригодны для этого благодаря флагу HTTP-Only, но тогда их можно установить только через заголовок Cookie. - person Tom Mettam; 25.11.2019
comment
@TomMettam Я понимаю, что мой пример идентификатора сеанса, возможно, политически некорректен или, по крайней мере, открыт для обсуждения. Однако, несмотря на то, что эта тема обсуждалась уже много лет, по ней до сих пор нет единого мнения, в результате чего возникает несколько открытых вопросов, таких как этот: security.stackexchange.com/questions/199527/ - person bvdb; 25.11.2019
comment
Я бы сказал, что лично по этому вопросу существует очень хороший консенсус; Если вы используете Google для использования localstorage для токенов, каждый результат говорит о том, что это плохая идея. Однако это не делает ваш ответ недействительным ... из Angular использование файлов cookie HTTPOnly не является вариантом - они не могут быть прочитаны или записаны с помощью Javascript. Таким образом, в этом случае по-прежнему нет причин использовать файлы cookie вместо LocalStorage. Поэтому мой комментарий был не противоречием вашему ответу, а скорее советом, дополняющим его. - person Tom Mettam; 25.11.2019

Сейчас: npm install ngx-cookie --save

Документ: https://github.com/salemdar/ngx-cookie

person Jessica Rocha    schedule 13.05.2019
comment
хорошо включать ссылки, но, пожалуйста, поделитесь шагами, чтобы сделать ответ более полезным - person Akber Iqbal; 13.05.2019