Как я могу определить на сервере (на стороне сервера), отключены ли файлы cookie в браузере? Является ли это возможным?
Подробное объяснение: я обрабатываю HTTP-запрос на сервере. Я хочу установить cookie через Set-Cookie
заголовок. В то время мне нужно знать, будет ли файл cookie установлен клиентским браузером или мой запрос на установку файла cookie будет проигнорирован.
http
cookies
server-side
Александр Яновец
источник
источник
Ответы:
Отправить ответ перенаправления с установленным файлом cookie; при обработке (специального) перенаправленного URL-теста для файла cookie - если он перенаправляет на нормальную обработку, в противном случае перенаправляет в состояние ошибки.
Обратите внимание, что это может только сказать вам, что браузер разрешил установку файла cookie, но не на срок. Мой FF позволяет мне принудительно перевести все файлы cookie в «сеансовый» режим, если сайт специально не добавлен в список исключений - такие файлы cookie будут отброшены при завершении работы FF, независимо от срока, указанного на сервере. И это режим, в котором я всегда запускаю FF.
источник
Вы можете использовать Javascript для этого
Библиотека:
function createCookie(name, value, days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else expires = ""; document.cookie = name + "=" + value + expires + "; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function eraseCookie(name) { createCookie(name, "", -1); } function areCookiesEnabled() { var r = false; createCookie("testing", "Hello", 1); if (readCookie("testing") != null) { r = true; eraseCookie("testing"); } return r; }
Код для запуска:
Помнить
Это работает, только если включен Javascript!
источник
Я не думаю, что есть прямые способы проверить. Лучший способ - сохранить значение в куки-файлах и попытаться прочитать их и решить, включены ли куки-файлы или нет.
источник
Обычный способ проверки поддержки файлов cookie - перенаправление.
Это хорошая идея делать это только тогда, когда пользователь пытается сделать что-то, что инициирует сеанс, например, войти в систему или добавить что-то в свою корзину. В противном случае, в зависимости от того, как вы с этим справитесь, вы потенциально блокируете доступ ко всему сайту для пользователей или ботов, которые не поддерживают файлы cookie.
Во-первых, сервер проверяет данные входа в систему как обычно - если данные входа неверны, пользователь получает эту обратную связь как обычно. Если это правильно, то сервер немедленно отвечает файлом cookie и перенаправлением на страницу, предназначенную для проверки этого файла cookie - который может быть тем же самым URL, но с некоторым флагом, добавленным в строку запроса. Если эта вторая страница не получает куки-файл, то пользователь получает сообщение о том, что он не может войти в систему, поскольку куки-файлы отключены в их браузере.
Если вы уже используете шаблон Post-Redirect-Get для своей формы входа, то этот параметр и проверка файла cookie не добавляют никаких дополнительных запросов - файл cookie может быть установлен во время существующего перенаправления и проверяться местом назначения, которое загружает после перенаправления.
Теперь о том, почему я провожу тест cookie только после действия, инициированного пользователем, а не при каждой загрузке страницы. Я видел, как сайты внедряют тест cookie на каждой странице, не понимая, что это повлияет на такие вещи, как поисковые системы, пытающиеся сканировать сайт. То есть, если у пользователя включены файлы cookie, тогда тестовый файл cookie устанавливается один раз, поэтому ему нужно перенести перенаправление только на первую запрашиваемую страницу, и с этого момента перенаправления не будут. Однако для любого браузера или другого пользовательского агента, такого как поисковая система, которая не возвращает файлы cookie, каждая страница может просто привести к перенаправлению.
Другой метод проверки поддержки файлов cookie - с помощью Javascript - в этом случае перенаправление не требуется - вы можете записать файл cookie и практически сразу же прочитать его, чтобы узнать, был ли он сохранен, а затем извлечен. Обратной стороной этого является то, что он запускается в сценарии на стороне клиента, то есть если вы все еще хотите, чтобы сообщение о том, поддерживаются ли файлы cookie, возвращалось на сервер, вам все равно придется это организовать - например, с помощью вызова Ajax.
Для моего собственного приложения я реализую некоторую защиту от атак CSRF входа в систему, варианта атак CSRF, путем установки файла cookie, содержащего случайный токен, на экране входа в систему до входа пользователя в систему и проверки этого токена, когда пользователь отправляет свой логин. Детали. Узнайте больше о Login CSRF от Google. Побочным эффектом этого является то, что в момент входа в систему я могу проверить наличие этого файла cookie - дополнительное перенаправление не требуется.
источник
Обычно вам может потребоваться проверить поддержку файлов cookie только после того, как пользователь совершит какое-либо действие на сайте, например, отправит форму входа, добавит товар в корзину и т. Д.
В настоящее время для меня проверка поддержки файлов cookie идет рука об руку с предотвращением CSRF (подделки межсайтовых запросов).
Вам, вероятно, следует пойти в другое место, чтобы узнать больше о CSRF , но идея заключается в том, что другие сайты могут обмануть или ваших пользователей, чтобы они отправили скрытую форму по их выбору на ваш собственный сайт. Чтобы решить эту проблему, нужно установить cookie, когда зритель видит форму, и установить соответствующий токен как скрытый элемент формы, а затем при обработке формы проверить, что и cookie, и скрытый элемент формы были установлены и соответствуют друг другу. Если это попытка CSRF-атаки, сайт не сможет предоставить скрытое поле, соответствующее куки-файлу пользователя, потому что куки-файл пользователя не будет доступен для чтения в соответствии с политикой того же происхождения.
Если форма отправляется без файлов cookie, но содержит действительный токен, из этого можно сделать вывод, что у пользователя отключены файлы cookie, и вывести сообщение о том, что пользователю следует включить файлы cookie и повторить попытку. Другая возможность, конечно, заключается в том, что пользователь стал жертвой попытки CSRF-атаки. Таким образом, блокировка пользователя, когда cookie не соответствует, также будет иметь побочный эффект предотвращения этой атаки.
источник
Я всегда использовал это:
Согласно w3schools «Свойство cookieEnabled поддерживается во всех основных браузерах».
Однако это работает для меня, когда я использую формы, где я могу указать браузеру отправить дополнительную информацию.
источник
Попробуйте сохранить что-нибудь в cookie, а затем прочтите это. Если вы не получаете ожидаемого результата, возможно, файлы cookie отключены.
источник
проверьте этот код, он вам поможет.
источник
Вопрос о том, разрешены ли файлы cookie, слишком логический. В моем браузере (Opera) есть настройки cookie для каждого сайта. Кроме того, этот параметр не является да / нет. Фактически, наиболее полезной формой является "только сеанс", игнорируя дату истечения срока действия серверов. Если вы протестируете его сразу после настройки, он будет там. Завтра не будет.
Кроме того, поскольку это параметр, который вы можете изменить, даже проверка того, остаются ли файлы cookie, сообщает вам об этом параметре только во время тестирования . Возможно, я решил принять этот файл cookie вручную. Если меня будут продолжать рассылать спам, я могу (а иногда и буду) просто отключить файлы cookie для этого сайта.
источник
Если вы хотите только проверить, включены ли файлы cookie сеанса (файлы cookie, которые существуют на протяжении всего сеанса), установите режим сеанса на AutoDetect в файле web.config, тогда инфраструктура Asp.Net запишет cookie в клиентский браузер. называется AspxAutoDetectCookieSupport . Затем вы можете найти этот файл cookie в коллекции Request.Cookies, чтобы проверить, включены ли файлы cookie сеанса на клиенте.
Например, в вашем наборе файлов web.config:
Затем проверьте, включены ли файлы cookie на клиенте с помощью:
Sidenote: по умолчанию для этого параметра установлено значение UseDeviceProfile, который будет пытаться записывать файлы cookie клиенту, если клиент их поддерживает , даже если файлы cookie отключены. Мне кажется немного странным, что это вариант по умолчанию, поскольку он кажется бессмысленным - сеансы не будут работать с файлами cookie, отключенными в клиентском браузере, если для него установлено значение UseDeviceProfile, и если вы поддерживаете режим без файлов cookie для клиентов, которые не поддерживают файлы cookie , тогда почему бы не использовать AutoDetect и не поддерживать режим без файлов cookie для клиентов, у которых они отключены ...
источник
Я использую гораздо более упрощенную версию ответа "balexandre" выше. Он пытается установить и прочитать файл cookie сеанса с единственной целью определить, включены ли файлы cookie. И да, для этого также необходимо включить JavaScript. Так что вам может понадобиться тег, если он вам нужен.
источник
NodeJS - сторона сервера - промежуточное ПО для перенаправления проверки файлов cookie - экспресс-сессия / анализатор файлов cookie
Зависимости
ПО промежуточного слоя
источник
cookieEnabled
Свойство возвращает логическое значение , которое определяет , будет ли куки в браузере включеныисточник
Используйте navigator.CookieEnabled для включенных файлов cookie (он вернет true или false) и noscript тега Html. Кстати, navigator.cookieEnabled - это javascript, поэтому не вводите его как HTML
источник
источник