Настройка cookie в Javascript (Angular): проблемы с точкой с запятой - PullRequest
0 голосов
/ 22 октября 2018

Я пытался настроить куки с TypeScript в Angular, когда столкнулся с, казалось бы, странной проблемой.

Я просто хотел сохранить некоторую информацию в куки для дальнейшего использования (только для тестирования).Все, что я сделал, это выполнил эту строку:

document.cookie = "token=" + value + "; expires=" + date + ";";

Если я выполню document.cookie впоследствии, однако результат будет следующим:

"Cookie: token=_value_"

Я ожидаю, что результат будет:

"Cookie: token=_value_; expires=_date_;"

Он просто стирает все после точки с запятой в строке.Если вместо этого я заменю их на запятые, все соединится правильно.Таким образом, должна быть какая-то проблема с точкой с запятой?Но в каждом «учебнике» для файлов cookie они используют эту грамматику.Я пробовал много вещей, таких как кодирование значений точки с запятой, а что нет.Я уверен, что есть простой ответ на это?

1 Ответ

0 голосов
/ 22 октября 2018

Когда вы объявляете cookie-файл именно с этой формой:

document.cookie = "key=value; property_1; property_2; ... property_n";

На основании этой документации MDN вы можете написать только один новый cookie-файл за раз.Если вы хотите объявить два файла cookie, вы должны выполнить два назначения:

document.cookie = "key=value; property_1; property_2; ... property_n";
document.cookie = "key2=value2; property_1; property_2; ... property_n";

Сейчас, почему вы не видите свойства при отображении document.cookie?

Это нормальное поведение.document.cookie на самом деле свойство доступа .Это означает, что JavaScript будет использовать геттер и сеттер, когда вы используете document.cookie.То, что вы напишите в своем коде, не будет тем, что вы прочтете позже, потому что оно соответственно вызовет установщик для назначения файла cookie document.cookie = ... и получателя для отображения document.cookie. Все управляется внутренним интерпретатором JavaScript.

В вашем случае вы объявляете один файл cookie со значением и датой истечения срока действия.Точка с запятой ; используется для указания других свойств файла cookie, который вы создаете.

document.cookie = "token=" + value + "; expires=" + date + ";";

В вашем примере объявляется новый файл cookie с именем token, значением value и свойствомexpires с датой, содержащейся в переменной date.Он вызовет внутренний установщик JavaScript для установки этого куки.

Теперь, если вы отобразите все свои куки с document.cookie, вы получите только имя и значение каждого куки, а не другие свойства как expires, path, secure или domain.Он управляется внутренним вызовом получателя, который выбирает отображение только пары ключ = значение каждого файла cookie.

Как упоминалось в этот ответ о переполнении стека вы не можете получить доступ к другим свойствам с помощью document.cookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...