Я не могу получить доступ к файлам cookie из JavaScript. Мне нужно прочитать какое-то значение и отправить его через JSON для моих пользовательских проверок.
Я пытался получить доступ к файлам cookie из JS, как это описано в:
Как вы можете видеть в коде, следующее:
var c_value = document.cookie;
Когда я пытаюсь получить доступ к document.cookie
значению из веб-отладчика Chrome, я вижу только пустую строку в выражениях Watch :
Поэтому я не могу прочитать значение куки, которое мне нужно.
Я проверил имя файла cookie, которое я отправляю, чтобы получить правильное связанное значение. Кроме того, я использую исходный код W3Schools для получения файлов cookie, если вам интересно (но из 2-й ссылки метод аналогичен).
Как я могу исправить свою проблему?
document.cookie
-инструмент Chrome, показывающий все мои файлы cookie и проверки в столбце Http. Почему он недоступен изdocument.cookie
?Ответы:
Скорее всего, вы имеете дело с
httponly
файлами cookie.httponly
- это флаг, который вы можете установить для файлов cookie, что означает, что они не могут быть доступны для JavaScript. Это сделано для предотвращения кражи файлов cookie с конфиденциальными данными или даже целых сеансов вредоносными скриптами.Таким образом, вам нужно либо отключить
httponly
флаг, либо вам нужно найти другой способ получить данные в свой javascript.Посмотрев на ваш код, будет легко отключить флаг только http:
Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;"); Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false }); Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });
Теперь у вас должна быть возможность получить доступ к информации cookie из JavaScript. Однако я не знаю точно, какие данные вы пытаетесь получить, поэтому, возможно, вы можете выбрать другой подход и, например, отобразить какой-либо атрибут данных на странице с необходимой информацией вместо попытки прочитать файл cookie:
<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
источник
Я бы сказал, что только http - ваш первый виновник, но это также может произойти, если не указать объем вашего файла cookie.
Если сайт был перенаправлен с другого домена, вам нужно будет изучить настройку области cookie. Домен и путь определяют область действия файла cookie, на какие URL-адреса следует отправлять файл cookie. В зависимости от этого вы можете не увидеть файл cookie в своем ответе.
Я столкнулся с этой проблемой при установке файла cookie для успешного входа в систему SSO SAML и не смог получить файл cookie из документа, потому что он никогда не отправлялся как часть запроса.
источник
следите также за атрибутом Path файла cookie, поскольку файл cookie виден только в подкаталогах в Path. У меня была твоя проблема, и я решил установить Путь "/"
источник
У меня была одна и та же проблема несколько раз. И каждый раз по разной причине.
Причины разные:
httpOnly
поля. Он был установлен,false
и я пытался получить к нему доступ с консоли. Настройкаtrue
или доступ к нему из исходного кода сделали свое дело.secure
поля. Это было,true
и я использовал только http.Expires / Max-Age
. Файл cookie устарел, и его не было видно вdocument.cookie
.источник
Если ваш файл cookie установлен
Set-Cookie
илиSet-Cookie2
не является частью коллекции заголовков ответов: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-methodВозвращает все заголовки из ответа, за исключением тех, чье имя поля - Set-Cookie или Set-Cookie2.
источник
Если вы используете безопасную аутентификацию, тогда вы не можете получить доступ к файлам cookie напрямую из-за безопасности. вам нужно изменить атрибут ответа на стороне сервера, используя приведенный ниже код.
Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;"); Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false }); Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });
Но вы не должны этого делать, потому что это может изменить безопасный на небезопасный, поэтому вам нужно найти решение, которое будет выполнено на стороне сервера, чтобы удалить файлы cookie и позволить вам выполнять некоторые операции.
Возможны изменения на стороне сервера.
источник