¿Cómo puedo detectar en el servidor (del 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 configurar una cookie a través del Set-Cookie
encabezado. Necesito saber en ese momento si el navegador del cliente establecerá la cookie o si se ignorará mi solicitud para establecer la cookie.
http
cookies
server-side
Alexander Yanovets
fuente
fuente
Respuestas:
Envíe una respuesta de redireccionamiento con el conjunto de cookies; al procesar la prueba de URL redirigida (especial) para la cookie; si está allí, redirige al procesamiento normal, de lo contrario, redirige a un estado de error.
Tenga en cuenta que esto solo puede indicarle que el navegador permitió que se estableciera la cookie, pero no por cuánto tiempo. Mi FF me permite forzar todas las cookies al modo de "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 siempre ejecuto FF.
fuente
Puede usar Javascript para lograr eso
Biblioteca:
Código para ejecutar:
Recuerda
¡Esto solo funciona si Javascript está habilitado!
fuente
No creo que haya formas directas de comprobarlo. La mejor manera es almacenar un valor en la cookie e intentar leerlos y decidir si las cookies están habilitadas o no.
fuente
Una forma habitual de comprobar la compatibilidad con cookies es mediante un redireccionamiento.
Es una buena idea hacer esto solo cuando el usuario está intentando hacer algo que inicia una sesión, como iniciar sesión o agregar algo a su carrito. De lo contrario, dependiendo de cómo lo maneje, potencialmente está bloqueando el acceso a todo su sitio para 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 forma normal. Si es correcto, entonces el servidor responde inmediatamente con una cookie y una redirección a una página que está diseñada para buscar esa cookie, que puede ser la misma URL pero con alguna marca agregada a la cadena de consulta. Si esa segunda página no recibe la cookie, 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 Post-Redirect-Get para su formulario de inicio de sesión, entonces esta configuración y verificación de la cookie no agrega ninguna solicitud adicional; la cookie se puede configurar durante la redirección existente y verificada por el destino que se 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 que implementan 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 configura una vez, por lo que solo tiene que soportar un redireccionamiento en la primera página que solicitan y a partir de ese momento no hay redireccionamientos. Sin embargo, para cualquier navegador u otro agente de usuario, como un motor de búsqueda, que no devuelve cookies, cada página podría simplemente resultar en una redirección.
Otro método para verificar el soporte de cookies es con Javascript; de esta manera, no se necesita necesariamente una redirección; puede escribir una cookie y leerla prácticamente de inmediato para ver si se almacenó y luego se recuperó. La desventaja de esto es que se ejecuta en un script en el lado del cliente , es decir, si aún desea que el mensaje sobre si las cookies son compatibles regrese al servidor, entonces aún debe organizarlo, como con una llamada Ajax.
Para mi propia aplicación, implemento alguna protección para los ataques de 'Iniciar sesión 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. Obtenga más información sobre el CSRF de inicio de sesión de Google. Un efecto secundario de esto es que en el momento en que inician sesión, puedo verificar la existencia de esa cookie; no es necesario un redireccionamiento adicional.
fuente
Por lo general, es posible que solo necesite verificar la compatibilidad con 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, la verificación del soporte de cookies va de la mano con la prevención de CSRF (Cross-Site Request Forgery).
Probablemente debería ir a otra parte para leer más sobre CSRF , pero la idea detrás de esto es que otros sitios pueden engañar a sus usuarios para que envíen un formulario oculto de su elección a su propio sitio. La forma de evitar esto es 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 hayan configurado y coincidan 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, porque la cookie del usuario no será legible para ellos bajo la política del mismo origen.
Si se envía un formulario sin cookies, pero contiene un token de apariencia válida, puede concluir que el usuario tiene las cookies deshabilitadas y muestra 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.
fuente
Siempre usé esto:
Según w3schools "La propiedad cookieEnabled es compatible con todos los navegadores principales".
Sin embargo, esto funciona para mí cuando estoy usando formularios, donde puedo indicarle al navegador que envíe la información adicional.
fuente
Intente almacenar algo en una cookie y luego léalo. Si no obtiene lo que espera, es probable que las cookies estén desactivadas.
fuente
revisa este código, te ayudará.
fuente
La pregunta 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 "solo de sesión", 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 la probó . Podría haber decidido aceptar esa cookie de forma manual. Si sigo recibiendo spam, puedo (y en ocasiones lo haré) simplemente desactivar las cookies para ese sitio.
fuente
Si solo desea verificar si las cookies de sesión (cookies que existen durante la vida útil de la sesión) están habilitadas, configure su modo de sesión en AutoDetect en su archivo web.config, entonces el marco 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:
Luego, verifique si las cookies están habilitadas en el cliente con:
Nota al margen : de forma predeterminada, se establece en UseDeviceProfile, que intentará escribir cookies en el cliente siempre que el cliente las admita , incluso si las cookies están desactivadas. Me parece un poco extraño que esta sea la opción predeterminada, ya que parece un poco inútil: las sesiones no funcionarán con las cookies deshabilitadas en el navegador del cliente si está configurado en UseDeviceProfile, y si admite el modo sin cookies para clientes que no admiten cookies , entonces ¿por qué no usar AutoDetect y admitir el modo sin cookies para los clientes que las tienen deshabilitadas ...
fuente
Estoy usando una versión mucho más simplificada de la respuesta de "balexandre" anterior. Intenta configurar 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. Por lo tanto, es posible que desee una etiqueta allí si desea tener una.
fuente
NodeJS - Lado del servidor - Middleware de redireccionamiento de comprobación de cookies - Sesión exprés / Analizador de cookies
Dependencias
Middleware
fuente
La
cookieEnabled
propiedad devuelve un valor booleano que especifica si las cookies están habilitadas o no en el navegador.fuente
Utilice navigator.CookieEnabled para las cookies habilitadas (devolverá verdadero o falso) y la etiqueta Html noscript. Por cierto navigator.cookieEnabled es javascript, así que no lo escriba como HTML
fuente
fuente