2009-07-17 12 views
43

Encontré un extraño problema de cookie en Safari. Si navegas al http://2much.ch puedes ingresar con FF/IE y navegar dentro del sitio.Safari no configura Cookie pero IE/FF hace

Pero si utiliza safari, puede ingresar solo una vez; no puedes navegar dentro del sitio. Descubrí que Safari no configura la cookie ingresada, pero FF/IE sí.

¿Qué pasa aquí?

+2

no tengo nada que añadir, salvo: el mejor nombre de dominio nunca. –

+0

hehe, thx :) Tal vez lo vendo :) – Gomez

+0

Quizás puedas explicar un poco acerca de la parte de configuración de cookies. Por ejemplo: ¿lo hace un complemento de Plone o un código personalizado? –

Respuesta

62

Parece que ha pulsado un error de Safari aquí; está redirigiendo cualquier navegador visitar a/entrada al establecer la cookie al mismo tiempo, y Safari está ignorando la cabecera Set-Cookie cuando se encuentra con el estado 302 HTTP:

$ curl -so /dev/null -D - http://4much.schnickschnack.info/ 
HTTP/1.1 302 Moved Temporarily 
Server: nginx/0.7.61 
Date: Sun, 19 Jul 2009 12:20:49 GMT 
Content-Type: text/html;charset=utf-8 
Connection: keep-alive 
Content-Length: 14260 
Content-Language: de 
Expires: Sat, 1 Jan 2000 00:00:00 GMT 
Location: http://4much.schnickschnack.info/entry 
Set-Cookie: colorstyle="bright"; Path=/; Expires=1248092449.12 
Set-Cookie: _ZopeId="73230900A39w5NG7q4g"; Path=/ 

Técnicamente, esto sería un error en Apple Foundation Classes, he encontrado un WebKit bug que indica que este es el caso.

Supongo que la solución consiste en establecer la cookie no en index_html sino en la entrada en su lugar.

+2

¡Gracias por la buena explicación, Martjin! He puesto el código en la entrada /. Ahora funciona. ¡GRACIAS! – Gomez

+0

usted es un salvavidas! – Paul

6

Hace un mes, me encontré con este problema. Al principio, pensé que era un tarro de galletas corrupto, ya que podía limpiar las cookies e irme.

Sin embargo, volvió a aparecer. Esta vez pasé una hora revisando lo que se envió, revisando lo que Safari me envió, y encontré el problema.

En este caso, tenía una matriz de valores de cookies que se envía al navegador después de iniciar sesión antes de la redirección. Los valores se veía algo así como 'ID de usuario', 'usuario nombre completo', 'alguna otra id', etc.

(sí, los identificadores son encriptados por lo que no hay preocupaciones)

Mi usuario nombre completo era en realidad en un formato <lastname>, <firstname>.

Cuando safari estaba volviendo a colocar la cookie en el servidor, todo después de la coma después del apellido se eliminó. Solo publicaba valores anteriores hasta ese punto.

Cuando eliminé la coma, el resto de los valores comenzaron a funcionar bien.

Parece que si envía un valor de cookie que contiene una coma, Safari no escapará correctamente en su almacenamiento interno. Lo que me lleva a pensar que si no están escapando las comas correctamente, es probable que haya algunos problemas de seguridad con el código de manejo de cookies de safari.

Dicho sea de paso, esto se probó en Win 7 x64 con safari 4.0.5. También puse una página web en: http://cookietest.livelyconsulting.com/ que muestra este problema exacto. (eliminé ese sitio de prueba)

IE, FF y chrome configuraron correctamente la cookie. Safari no.

+4

Chris: su problema está completamente relacionado con el analizador. Tiene que ver con cómo CFNetwork fusiona los encabezados Set-Cookie en un encabezado Set-Cookie durante el tiempo de análisis HTTP. En general, los encabezados HTTP duplicados se pueden unir en un encabezado con un delimitador ','. Desafortunadamente, Set-Cookies ha sido un encabezado históricamente roto. Esto fue discutido en una reciente reunión de IETF. No hay problema con la representación interna de las cookies. –

+2

@Mark Pauley: Me alegro de ver a un desarrollador de apple hablando activamente sobre cómo Safari maneja las cookies. Me encontré con algunos de su correspondencia en http://www.ietf.org/mail-archive/web/http-state/current/msg00645.html Creo que el hecho de que Safari es el único navegador que exhiben este comportamiento de rotura es razón suficiente para tirar de la característica. – NotMe

+3

No estoy seguro de por qué alguien podría votar aquí casi un año después; sin embargo, el comportamiento todavía está roto en Safari 5.0.3. – NotMe

2

Me encontré con el mismo problema con Chrome. Chrome no ignora el encabezado set-cookie mientras está redirigiendo, pero nunca se sabe el orden (primero configure la cookie o redirija). He aquí algo que he intentado:

Tengo un sitio web que admite inglés y francés.Me implementado (con php) de esta manera:

localhost tiene un enlace a localhost/fr (que set-cookie para el francés y redirigir a localhost). Funciona. (establecer cookies primero)

localhost/ruta1 tiene un enlace a localhost/fr? return =/ruta1 (que establece-cookie en francés y redirige a localhost/ruta1). No funciona (redirigir primero, el idioma no cambió)

localhost/path1 tiene un enlace a localhost/fr? return = www.google.com (que establece-cookie a francés y redirige a google). Cuando volví a mi sitio web, está en francés. (Lo que significa Set-Cookie a francés no se ignora, sólo se ejecuta después de redirección)

Esperanza He sido claro, Inglés es un idioma extranjero para mí.

3

Nos hemos encontrado con un problema muy similar en el Safari (v. 7.0.6) ignoraría una cookie. El encabezado de la cookie se veía perfectamente bien, casi idéntico a otra cookie que fue recordado.

Resultó que el culpable era anterior encabezado de cookie con un valor de expires malformado. El manejo de Safari de los encabezados de las cookies rotas evidentemente no es tan robusto como el de los otros navegadores.

+0

¿Qué fue malformado sobre el valor de caducidad? –

+1

@JohnBachir Lo siento, ya no recuerdo. Probablemente, el formato de fecha no era válido. –

Cuestiones relacionadas