Не удается получить доступ к файлам 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)


arrow_upward
3
arrow_downward

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

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

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

person Tenzin Palber    schedule 10.11.2017

arrow_upward
3
arrow_downward

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

person ejaenv    schedule 07.12.2017

arrow_upward
1
arrow_downward

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

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

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

arrow_upward
0
arrow_downward

Если ваш файл 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

arrow_upward
0
arrow_downward

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

arrow_upward

arrow_downward

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