2010-02-26 11 views
13

¿Por qué si creo una cookie en www.example.com y la compruebo en example.com, la cookie no existe allí? Planeo simplemente usar .htaccess redireccionar no www a un dominio www. ¿Pero cómo soluciono esto?Problema de cookies PHP - www o sin www

+0

Debe establecer el dominio de cookies explícitamente. O use algo como https://github.com/delight-im/PHP-Cookie, que maneja el caso "www" frente a "no-www" automáticamente. – caw

Respuesta

32

Los navegadores son los principales culpables aquí, no PHP. Almacenan por dominio, y no saben que www es un caso especial; desde su perspectiva, www.mydomain.com y mydomain.com son cadenas diferentes, y por lo tanto tienen diferentes políticas de seguridad. Sin embargo, hay algo que puedes hacer.

Al configurar la cookie, use .mydomain.com (con el punto inicial). Esto le indicará al navegador de su usuario que haga que la cookie esté accesible al mydomain.com y a todos los subdominios, incluido www. El setcookie de PHP tiene el argumento $domain, pero es el quinto en la lista, por lo que puede necesitar establecer $expire y $path en sus valores predeterminados para poder acceder a él.

setcookie('name', 'value', time()+3600, '/', '.mydomain.com'); 

Por coherencia, sin embargo, es posible que desee considerar la posibilidad cambio de ruta todo el tráfico web a un dominio específico, es decir, enviar tráfico a mydomain.comwww.mydomain.com, o viceversa. Mi vago conocimiento de SEO (editar si es incorrecto) me dice que es útil para no tener contenido duplicado, y te ahorra todos esos problemas de autenticación. Además, si almacena activos en un subdominio, tener cookies allí reduce la velocidad del tráfico al tener que transportarlo cada vez, por lo que almacenar las cookies de la aplicación solo en www le da ese impulso de velocidad.

Here is a tutorial on how to accomplish such a redirect in Apache.

+0

Estás cerca de las cosas de SEO. No importa si opta por hacerlo con o sin www; siempre y cuando elijas uno y te apegues a él. – NotMe

+0

Editado para generalizar :) – Matchu

+0

www. * No es un caso especial. Es una convención, pero no tiene un significado codificado en http/cookie RFC.Sería bastante absurdo que los navegadores administren mágicamente un tratamiento especial a www. De todos modos, +1. –

-2

porque php traduce www.mydomain.com de manera diferente a midominio.com. Si los dominios no son 100% idénticos, la cookie no coincidirá.

Y estoy seguro de que el navegador también busca el 100% de coincidencia del nombre de dominio antes de permitir que los servidores los sobrescriban.

Simplemente use .htaccess para redirigir. Es la única forma SEGURA de abordar esto en todos los navegadores.

+0

Prefijo del dominio con un punto soluciona el problema. La coincidencia exacta no es requerida. – TheJacobTaylor

+1

"porque php traduce" ... No tiene nada que ver con php y todo que ver con los navegadores. Los navegadores no envían todas las cookies que tienen al sitio web. Solo eligen uno o más nombres de dominio coincidentes. – NotMe

0

Creo que se puede establecer la cookie en example.com (realmente .example.com) y se le enviará si se van a www.example.com, pero no viceversa. Esta política de seguridad estándar es evitar que los datos privados de los usuarios se envíen a servidores no deseados.

Personalmente, yo uso en mi VirtualHosts apache2.conf:

<VirtualHost *:80> 
    ServerName example.com 
    RedirectMatch (.*) http://www.example.com$1 
</VirtualHost> 

... en este ejemplo, todo el mundo tratando de cargar, por ejemplo, http://example.com/index.html se redirige a http://www.example.com/index.html.

1
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com"); 
Cuestiones relacionadas