Не удается получить доступ к файлам cookie из document.cookie в JS, но браузер показывает, что файлы cookie существуют

Я не могу получить доступ к файлам cookie из JavaScript. Мне нужно прочитать какое-то значение и отправить его через JSON для моих пользовательских проверок.

Я пытался получить доступ к файлам cookie из JS, как это описано в:

Как вы можете видеть в коде, следующее:

var c_value = document.cookie;

Когда я пытаюсь получить доступ к значению document.cookie из веб-отладчика Chrome, я вижу только пустую строку в контрольных выражениях:

Поэтому я не могу прочитать значение куки, которое мне нужно.

Я проверил имя файла cookie, которое я отправляю, чтобы получить правильное связанное значение. Кроме того, я использую исходный код W3Schools для получения файлов cookie, если вам интересно (но из второй ссылки метод аналогичен).

Как я могу исправить свою проблему?


person Community    schedule 06.07.2013    source источник
comment
@PeeHaa Правда? Я не знаю. Я работаю над проектом ASP.NET MVC 4 (Razor) и не знаю, поддерживает ли он по умолчанию включение этого параметра. Не сердитесь на меня :) Я новичок в веб-разработке.   -  person    schedule 07.07.2013
comment
Проверьте файл cookie в своем браузере, и он должен сказать, httponly он или нет.   -  person PeeHaa    schedule 07.07.2013
comment
@PeeHaa Я проверил, есть ли проверка в столбце HTTP в таблице просмотра файлов cookie в веб-инструментах Chrome, значит ли это, что мои файлы cookie являются только HTTP? Если да, значит, мой проект использует файлы cookie только для HTTP, и я не понимаю, как исправить свою проблему :(   -  person    schedule 07.07.2013
comment
да. Это означает, что это файлы cookie httponly. Часто это именно то, что вам нужно, потому что это защищает вас от определенных типов атак. У вас есть контроль над установкой файлов cookie? Если да: какой язык вы используете? Также для чего вам нужна информация о файлах cookie, потому что, возможно, есть способ теста.   -  person PeeHaa    schedule 07.07.2013
comment
@PeeHaa Да, у меня есть такой контроль. Файлы cookie устанавливаются ответом на стороне сервера. Я использую C # в своем проекте ASP.NET MVC4. Часть, в которой я устанавливаю файлы cookie: ideone.com/fBqtke   -  person    schedule 07.07.2013
comment
Ну, я мало что знаю о asp, но, исходя из вашего кода, должно быть довольно очевидно, как отключить файлы cookie httponly: P   -  person PeeHaa    schedule 07.07.2013
comment
@PeeHaa, у вас есть предложения, как это исправить? Я сейчас гуглю. Все веб-сайты предлагают использовать document.cookie, веб-инструмент Chrome, показывающий все мои файлы cookie и проверки в столбце Http. Почему он недоступен из document.cookie?   -  person    schedule 07.07.2013
comment
Проблема не на стороне клиента, а на стороне сервера. Вы можете отключить установленный флаг httponly.   -  person PeeHaa    schedule 07.07.2013
comment
@PeeHaa Отключили тот же результат в веб-отладчике :(   -  person    schedule 07.07.2013
comment
@PeeHaa Я хочу отметить все ваши комментарии как крайне неконструктивные. Совершенно очевидно, что проблема здесь - классический случай Not Enough jQuery.   -  person DaveRandom    schedule 07.07.2013
comment
@DaveRandom Он был конструктивен, насколько мог. Мне не нужен jQuery. Я исправил. Это была проблема на стороне сервера с параметром HttOnly с автоматической привязкой. Так что спасибо PeeHaa.   -  person    schedule 07.07.2013
comment
@PeeHaa Спасибо! Как мы видим, для этого не нужен jQuery. Вы можете опубликовать ответ на этот вопрос? Отмечу вас как правильного.   -  person    schedule 07.07.2013
comment
Отвечает ли это на ваш вопрос? Javascript document.cookie всегда пустая строка   -  person NO_NAME    schedule 23.09.2020


Ответы (6)


Я бы сказал, что только http - ваш первый виновник, но это также может произойти, если не указать область действия вашего файла cookie.

Если сайт был перенаправлен с другого домена, вам нужно будет изучить настройку области cookie. Домен и путь определяют область действия файла cookie, на какие URL-адреса следует отправлять файл cookie. В зависимости от этого вы можете не увидеть файл cookie в своем ответе.

Я столкнулся с этой проблемой при установке файла cookie для успешного входа в систему SSO SAML и не смог получить файл cookie из документа, поскольку он никогда не отправлялся как часть запроса.

person Tenzin Palber    schedule 10.11.2017

следите также за атрибутом Path файла cookie, поскольку файл cookie виден только в подкаталогах в Path. У меня была ваша проблема, и я решил установить путь "/"

person ejaenv    schedule 07.12.2017

У меня была одна и та же проблема несколько раз. И каждый раз по разной причине.

Причины разные:

  • проблема поля httpOnly. Он был установлен на false, и я пытался получить к нему доступ с консоли. Установка true или доступ к нему из исходного кода помогли.
  • проблема поля secure. Это было true, и я использовал только http.
  • проблема Expires / Max-Age. Файл cookie устарел, и его не было в document.cookie.
person vinzee    schedule 16.07.2020

Если ваш файл cookie установлен как Set-Cookie или Set-Cookie2, он не является частью коллекции заголовков ответов: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

Возвращает все заголовки из ответа, за исключением тех, чье имя поля - Set-Cookie или Set-Cookie2.

person Dunken    schedule 07.01.2014

Если вы используете безопасную аутентификацию, тогда вы не можете получить доступ к файлам 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 и позволить вам выполнять некоторые операции.

Можно вносить изменения на стороне сервера.

person Manas    schedule 04.07.2018

person    schedule
comment
Также! кстати, я нашел несколько информации, которую HttpOnly не защищает на самом деле и может быть не установлен. Что вы думаете об этом? - person ; 07.07.2013
comment
httponly - это не серебряная пуля. Но он защитит вас от определенных типов атак. owasp.org/index.php/HttpOnly - person PeeHaa; 07.07.2013