http - variable - Cómo detectar el lado del servidor si las cookies están deshabilitadas
guardar variable en cookie javascript (14)
Enviar una respuesta de redireccionamiento con el conjunto de cookies; al procesar la prueba de dirección URL redirigida (especial) para la cookie, si está allí redirigir al procesamiento normal; de lo contrario, redirigir a un estado de error.
Tenga en cuenta que esto solo puede indicarle que el navegador permitió que se establezca la cookie, pero no por cuánto tiempo. Mi FF me permite forzar todas las cookies al modo "sesión", a menos que el sitio se agregue específicamente a una lista de excepciones; dichas cookies se descartarán cuando FF se apague independientemente del vencimiento especificado por el servidor. Y este es el modo en el que ejecuto FF siempre.
¿Cómo puedo detectar en el servidor (lado del servidor) si las cookies en el navegador están deshabilitadas? ¿Es posible?
Explicación detallada: estoy procesando una solicitud HTTP en el servidor. Quiero establecer una cookie a través del encabezado Set-Cookie
. Necesito saber en ese momento si la cookie será configurada por el navegador del cliente o mi solicitud para establecer la cookie será ignorada.
Estoy usando una versión mucho más simplificada de la respuesta de "balexandre" anterior. Intenta establecer y leer una cookie de sesión con el único propósito de determinar si las cookies están habilitadas. Y sí, esto requiere que JavaScript también esté habilitado. Entonces, puede querer una etiqueta allí si le interesa tener una.
<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>
Intenta guardar algo en una cookie y luego léelo. Si no obtiene lo que espera, entonces las cookies probablemente estén deshabilitadas.
La cuestión de si las cookies están "habilitadas" es demasiado booleana. Mi navegador (Opera) tiene una configuración de cookies por sitio. Además, esa configuración no es sí / no. La forma más útil es, de hecho, "sesión-única", ignorando la fecha de caducidad de los servidores. Si lo prueba directamente después de la configuración, estará allí. Mañana, no lo hará.
Además, dado que es una configuración que puede cambiar, incluso probar si las cookies permanecen solo le informa sobre la configuración cuando realizó la prueba . Podría haber decidido aceptar esa cookie, de forma manual. Si continúo recibiendo correo no deseado, puedo (y en ocasiones lo haré) desactivar las cookies para ese sitio.
La propiedad cookieEnabled
devuelve un valor booleano que especifica si las cookies están habilitadas o no en el navegador
<script>
if (navigator.cookieEnabled) {
// Cookies are enabled
}
else {
// Cookies are disabled
}
</script>
No creo que haya formas directas de verificarlo. La mejor manera es almacenar un valor en la cookie e intentar leerlos y decidir si las cookies están habilitadas o no.
Por lo general, es posible que solo necesite verificar el soporte de cookies después de que el usuario haya realizado alguna acción en el sitio, como enviar un formulario de inicio de sesión, agregar un artículo a su carrito, etc.
Para mí, actualmente, verificar el soporte de cookies va de la mano con la prevención de CSRF (Cross-Site Request Forgery).
Probablemente deberías ir a otro lado para leer más sobre CSRF , pero la idea detrás de esto es que otros sitios pueden engañar o que tus usuarios envíen una forma oculta de su elección a tu propio sitio. La solución consiste en establecer una cookie cuando el espectador ve un formulario, y establecer un token coincidente como un elemento de formulario oculto, y luego, al procesar el formulario, verificar que tanto la cookie como el elemento de formulario oculto se establecieron y coinciden entre sí. Si se trata de un intento de ataque CSRF, el sitio no podrá proporcionar el campo oculto para que coincida con la cookie del usuario, ya que la cookie del usuario no podrá leerse bajo la misma política de origen.
Si se envía un formulario sin cookie, pero sí con un token de aspecto válido, puede concluir que el usuario ha desactivado las cookies y arroja un mensaje que indica que el usuario debe habilitar las cookies y volver a intentarlo. La otra posibilidad, por supuesto, es que el usuario sea víctima de un intento de ataque CSRF. Por lo tanto, bloquear al usuario cuando la cookie no coincide también tendrá el efecto secundario de prevenir ese ataque.
Puedes usar Javascript para lograr eso
Biblioteca:
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;
}
Código para ejecutar:
alert(areCookiesEnabled());
Recuerda
¡Esto solo funciona si Javascript está habilitado!
Si solo desea verificar si las cookies de sesión (cookies que existen durante el tiempo de vida de la sesión) están habilitadas, configure su modo de sesión para AutoDetectar en su archivo web.config, luego el framework Asp.Net escribirá una cookie en el navegador del cliente llamado AspxAutoDetectCookieSupport . Luego, puede buscar esta cookie en la colección Request.Cookies para verificar si las cookies de sesión están habilitadas en el cliente.
Por ejemplo, en su conjunto de archivos web.config:
<sessionState cookieless="AutoDetect" />
Luego, compruebe si las cookies están habilitadas en el cliente con:
if (Request.Cookies["AspxAutoDetectCookieSupport"] != null) { ... }
Nota: De manera predeterminada, esto se establece en UseDeviceProfile, que intentará escribir cookies en el cliente, siempre y cuando el cliente las respalde , incluso si las cookies están deshabilitadas. Me parece un poco extraño que esta sea la opción predeterminada, ya que parece un tanto inútil: las sesiones no funcionarán con las cookies deshabilitadas en el navegador del cliente con el parámetro UseDeviceProfile, y si admite el modo sin cookies para los clientes que no admiten cookies , ¿por qué no utilizar AutoDetect y admitir el modo sin cookies para los clientes que los tienen desactivados ...
Siempre usé esto:
navigator.cookieEnabled
De acuerdo con w3schools "La propiedad cookieEnabled es compatible con todos los principales navegadores".
Sin embargo, esto funciona para mí cuando estoy usando formularios, donde puedo indicar al navegador que envíe la información adicional.
Una forma común de verificar el soporte de cookies es a través de una redirección.
Es una buena idea hacerlo solo cuando el usuario intente hacer algo que inicie una sesión, como iniciar sesión o agregar algo a su carrito. De lo contrario, según cómo lo maneje, potencialmente está bloqueando el acceso a todo su sitio para los usuarios, o bots, que no admiten cookies.
En primer lugar, el servidor verifica los datos de inicio de sesión de forma normal: si los datos de inicio de sesión son incorrectos, el usuario recibe esa información de manera normal. Si es correcto, el servidor responde inmediatamente con una cookie y un redireccionamiento a una página que está diseñada para buscar esa cookie, que puede ser la misma URL pero con algún indicador agregado a la cadena de consulta. Si esa segunda página no recibe la cookie, entonces el usuario recibe un mensaje que indica que no puede iniciar sesión porque las cookies están deshabilitadas en su navegador.
Si ya está siguiendo el patrón de Post-Redirect-Get para su formulario de inicio de sesión, esta configuración y verificación de la cookie no agrega ninguna solicitud adicional: la cookie se puede configurar durante el redireccionamiento existente y verificada por el destino que carga después de la redirección.
Ahora por qué solo hago una prueba de cookies después de una acción iniciada por el usuario que no sea en cada carga de página. He visto sitios implementar una prueba de cookies en cada página, sin darme cuenta de que esto tendrá efectos en cosas como los motores de búsqueda que intentan rastrear el sitio. Es decir, si un usuario tiene las cookies habilitadas, entonces la cookie de prueba se establece una vez, por lo que solo tienen que soportar un redireccionamiento en la primera página que solicitan y, a partir de ese momento, no hay redirecciones. Sin embargo, para cualquier navegador u otro agente de usuario, como un motor de búsqueda, que no devuelva cookies, cada página podría simplemente redirigir.
Otro método para verificar el soporte de cookies es con Javascript, de esta manera, no se necesita redirección, puede escribir una cookie y volver a leerla casi de inmediato para ver si se almacenó y luego se recuperó. La desventaja de esto es que se ejecuta en secuencia de comandos en el lado del cliente , es decir, si aún desea el mensaje sobre si las cookies son compatibles para volver al servidor, entonces todavía tiene que organizar eso, como con una llamada Ajax.
Para mi propia aplicación, implementé cierta protección para los ataques ''Login CSRF'', una variante de los ataques CSRF, estableciendo una cookie que contiene un token aleatorio en la pantalla de inicio de sesión antes de que el usuario inicie sesión y verificando ese token cuando el usuario envía su inicio de sesión detalles. Lea más sobre Login CSRF de Google. Un efecto colateral de esto es que, en el momento en que inician sesión, puedo verificar la existencia de esa cookie, no es necesaria una redirección adicional.
Use navigator.CookieEnabled para cookies habilitadas (devolverá true de false) y la etiqueta HTML noscript. Por cierto, navigator.cookieEnabled es javascript, así que no lo escriba como HTML
revisa este código, te ayudará.
<?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());
<?php session_start();
if(SID!=null){
echo "Please enable cookie";
}
?>