Как определить на стороне сервера, отключены ли файлы cookie
Как я могу определить на сервере (на стороне сервера), отключены ли куки в браузере? Возможно ли это?
подробное описание: я обрабатываю HTTP-запрос на сервере. Я хочу установить куки через . Мне нужно знать в то время, будет ли файл cookie установлен браузером клиента или мой запрос на установку файла cookie будет проигнорирован.
15 ответов:
отправить ответ перенаправления с набором файлов cookie; при обработке (специального) перенаправленного URL - теста для файла cookie-если он там перенаправляется на обычную обработку, в противном случае перенаправляется в состояние ошибки.
обратите внимание, что это может только сказать вам, что браузер разрешил установить cookie, но не надолго. Мой FF позволяет мне принудительно перевести все куки в режим "сеанса", если сайт специально не добавлен в список исключений - такие куки будут отброшены при выключении 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; }код:
alert(areCookiesEnabled());помните
это работает только если включен Javascript!
Я не думаю, что есть прямые пути, чтобы проверить. Лучший способ-сохранить значение в файле cookie и попытаться прочитать их и решить, включены ли файлы cookie или нет.
распространенный способ проверки поддержки файлов cookie - это перенаправление.
Это хорошая идея, чтобы сделать это только тогда, когда пользователь пытается сделать что-то, что инициирует сеанс, например, войти в систему или добавить что-то в свою корзину. В противном случае, в зависимости от того, как вы справитесь с этим, вы могли бы блокировать доступ ко всему сайту для пользователей или ботов - которые не поддерживают куки.
во-первых, сервер проверяет данные для входа как обычно - если данные для входа неверны пользователь получает обратную связь, как обычно. Если это правильно, то сервер немедленно отвечает cookie и перенаправлением на страницу, которая предназначена для проверки этого cookie - который может быть просто тем же URL, но с некоторым флагом, добавленным в строку запроса. Если эта вторая страница не получает куки, то пользователь получает сообщение о том, что они не могут войти в систему, потому что куки отключены в их браузере.
Если вы следуете после перенаправления-получить шаблон для вашей формы входа уже тогда эта настройка и проверка куки не добавляет никаких дополнительных запросов - куки можно установить во время существующего редиректа и проверить по назначению, которое загружается после редиректа.
теперь о том, почему я делаю тест cookie только после инициированного пользователем действия, отличного от загрузки каждой страницы. Я видел, как сайты реализуют тест cookie на каждой странице, не понимая, что это будет иметь последствия для таких вещей, как поисковые системы, пытающиеся сканировать сайт. Что если у пользователя есть куки-файлы, то тестовый куки-файл устанавливается один раз, поэтому им нужно только перенести перенаправление на первую страницу, которую они запрашивают, и с тех пор перенаправлений нет. Однако для любого браузера или другого пользовательского агента, такого как поисковая система, которая не возвращает куки, каждая страница может просто привести к перенаправлению.
другой способ проверки поддержки файлов cookie - это Javascript - таким образом, перенаправление не обязательно требуется - вы можете написать файл cookie и прочитать его вернуться практически сразу, чтобы увидеть, если он был сохранен, а затем извлечен. Недостатком этого является то, что он работает в скрипте на на стороне клиента - т. е. если вы все еще хотите, чтобы сообщение о том, поддерживаются ли файлы cookie, чтобы вернуться на сервер, вам все равно нужно организовать это - например, с помощью вызова Ajax.
для моего собственного приложения я реализую некоторую защиту для атак "Login CSRF", вариант атак CSRF, установив файл cookie, содержащий случайный маркер для входа экран перед входом пользователя в систему и проверка этого маркера, когда пользователь отправляет свои данные для входа. Подробнее о логине CSRF от Google. Побочным эффектом этого является то, что в тот момент, когда они входят в систему, я могу проверить наличие этого файла cookie - дополнительное перенаправление не требуется.
Я всегда использовал это:
navigator.cookieEnabledпо данным w3schools "свойство cookieEnabled поддерживается во всех основных браузерах.".
однако, это работает для меня, когда я использую формы, где я могу заставить браузер послать дополнительную информацию.
обычно вам может потребоваться проверить поддержку файлов cookie только после того, как пользователь предпринял некоторые действия на сайте, такие как отправка формы входа, добавление элемента в корзину и т. д.
для меня в настоящее время проверка поддержки файлов cookie идет рука об руку с предотвращением CSRF (подделки межсайтовых запросов).
вы, вероятно, должны пойти в другое место, чтобы прочитать подробнее о CSRF, но идея заключается в том, что другие сайты могут обмануть или ваши пользователи в отправке скрытая форма их выбора на вашем собственном сайте. Способ обойти это-установить cookie, когда средство просмотра видит форму, и установить соответствующий маркер как скрытый элемент формы, а затем при обработке формы проверьте, что и cookie, и скрытый элемент формы были установлены и соответствуют друг другу. Если это попытка атаки CSRF, сайт не сможет предоставить скрытое поле, соответствующее файлу cookie пользователя, потому что файл cookie пользователя не будет читаться для них в том же источнике политика.
Если форма отправлена без куки, но она содержит действительный токен, то вы можете сделать вывод из этого, что пользователь отключил куки и выдает сообщение о том, что пользователь должен включить куки и повторить попытку. Другая возможность, конечно, заключается в том, что пользователь является жертвой попытки атаки CSRF. Таким образом, блокировка пользователя, когда файл cookie не соответствует, также будет иметь побочный эффект предотвращения этой атаки.
попробуйте сохранить в cookie-файл, а затем прочитать его. Если вы не получаете то, что ожидаете, то куки, вероятно, отключены.
проверить этот код , это поможет вам .
<?php session_start(); function visitor_is_enable_cookie() { $cn = 'cookie_is_enabled'; if (isset($_COOKIE[$cn])) return true; elseif (isset($_SESSION[$cn]) && $_SESSION[$cn] === false) return false; // saving cookie ... and after it we have to redirect to get this setcookie($cn, '1'); // redirect to get the cookie if(!isset($_GET['nocookie'])) header("location: ".$_SERVER['REQUEST_URI'].'?nocookie') ; // cookie isn't availble $_SESSION[$cn] = false; return false; } var_dump(visitor_is_enable_cookie());
вопрос о том, включены ли куки-файлы, слишком логичен. Мой браузер (Opera) имеет настройки cookie для каждого сайта. Кроме того, этот параметр не является Да/нет. Наиболее полезной формой является фактически "только сессия", игнорируя дату истечения срока действия серверов. Если вы протестируете его непосредственно после установки, он будет там. Завтра этого не будет.
кроме того, поскольку это настройка, которую вы можете изменить, даже проверка того, остаются ли куки, говорит вам только о настройке когда вы проверяли. Я мог бы решил принять этот один файл cookie вручную. Если я продолжаю спамить, я могу (и иногда, будет) просто отключить куки для этого сайта.
Если вы хотите только проверить, включены ли сеансовые куки (куки, которые существуют в течение всего времени сеанса), установите режим сеанса в автоопределение в интернете.конфигурационный файл, затем Asp.Net фреймворк будет писать куки в клиентский браузер под названием AspxAutoDetectCookieSupport. Затем вы можете найти этот файл cookie в запросе.Коллекция Cookies, чтобы проверить, включены ли сеансовые cookies на клиенте.
например, в вашей сети.конфигурационный файл набор:
<sessionState cookieless="AutoDetect" />затем проверьте, включены ли файлы cookie на клиенте с помощью:
if (Request.Cookies["AspxAutoDetectCookieSupport"] != null) { ... }Sidenote: по умолчанию это значение равно UseDeviceProfile, который будет пытаться писать файлы cookie клиенту до тех пор, пока клиент поддерживает них, даже если куки отключены. Я нахожу немного странным, что это опция по умолчанию, поскольку она кажется бессмысленной-сеансы не будут работать с куки-файлами, отключенными в браузере клиента с установленным набором UseDeviceProfile, и если вы поддерживаете режим cookieless для клиентов, которые не поддерживают cookies, то почему бы не использовать автоопределение и поддерживать режим cookieless для клиентов, у которых они отключены...
Я использую гораздо более упрощенную версию ответа "balexandre"выше. Он пытается установить и прочитать файл cookie сеанса с единственной целью определения, включены ли файлы cookie. И да, это требует, чтобы JavaScript был включен. Так что вы можете захотеть тег там, если вы хотите иметь один.
<script> // Cookie detection document.cookie = "testing=cookies_enabled; path=/"; if(document.cookie.indexOf("testing=cookies_enabled") < 0) { // however you want to handle if cookies are disabled alert("Cookies disabled"); } </script> <noscript> <!-- However you like handling your no JavaScript message --> <h1>This site requires JavaScript.</h1> </noscript>
The
cookieEnabledсвойство возвращает логическое значение, указывающее, включены ли файлы cookie в браузере<script> if (navigator.cookieEnabled) { // Cookies are enabled } else { // Cookies are disabled } </script>
NodeJS-Серверная Сторона - Cookie Проверка Перенаправления Middleware-Экспресс-Сеанс / Парсер Cookie
зависимости
var express = require('express'), cookieParser = require('cookie-parser'), expressSession = require('express-session')Middleware
return (req, res, next) => { if(req.query.cookie && req.cookies.cookies_enabled) return res.redirect('https://yourdomain.io' + req.path) if(typeof(req.cookies.cookies_enabled) === 'undefined' && typeof(req.query.cookie) === 'undefined') { return res.cookie('cookies_enabled', true, { path: '/', domain: '.yourdomain.io', maxAge: 900000, httpOnly: true, secure: process.env.NODE_ENV ? true : false }).redirect(req.url + '?cookie=1') } if(typeof(req.cookies.cookies_enabled) === 'undefined') { var target_page = 'https://yourdomain.io' + (req.url ? req.url : '') res.send('You must enable cookies to view this site.<br/>Once enabled, click <a href="' + target_page + '">here</a>.') res.end() return } next() }
использовать навигатор.CookieEnabled для cookies включен (он будет возвращать true из false) и HTML-тег noscript. Кстати навигатор.cookieEnabled-это javascript, поэтому не вводите его как HTML
Comments