2010-06-01 8 views
18

Utilizando Google Chrome, aparentemente estoy perdiendo/corrompiendo datos de sesión cuando navego entre páginas (PHP 5.0.4, Apache 2.0.54). El sitio web funciona perfectamente bien en IE7/8, Firefox, Safari & Opera. El problema es solo con Google Chrome.Perdiendo aleatoriamente variables de sesión solamente en Google Chrome y reescritura de URL

Reduje el problema. Estoy usando URL amigables para la búsqueda y oculto mi controlador frontal (index.php) a través de un archivo .htaccess. Por lo que la URL se parece a: www.domain.com/blah/blah/ Aquí está el contenido del archivo .htaccess:

Options +FollowSymlinks 
RewriteEngine on 
#allow cool urls 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) index.php [L] 
#allow to have Url without index.php 

Si quito el archivo .htaccess, y exponer el controlador frontal en la dirección URL: www.domain .com/index.php/blah/blah /, Chrome funciona perfectamente bien.

¿Alguna idea de pensamientos? Estoy pensando que es algún tipo de problema con la forma en que Chrome identifica qué cookie usar y enviar al servidor. Esto sucede en Chrome 4 & 5. ¡Gracias!

Respuesta

16

que tenían el mismo problema y solucionarlo sólo tuve que crear un favicon.ico y colocarlo en el Webroot - de lo contrario podría ver usando un violinista que dio como resultado 404 para este con cada solicitud de página de Chrome (a pesar de que en realidad no estoy enlazando a un favicon en el marcado de la página).

En mi opinión, esto es claramente un error en Chrome, ya que la falta de un favicon no debería afectar a los datos de la sesión.

+0

¡Guau! Nunca lo habría adivinado, buscaría un enlace roto o algo así, pero nunca el favicon, ¡buen trabajo, realmente funcionó! – multimediaxp

+0

Esto parece solucionar el problema, pero creo que todo está relacionado con la forma en que Chrome está manejando .htaccess - No estoy seguro de por qué, pero no tuve ningún problema hasta que implementé un archivo .htaccess personalizado. También tuve este problema en iOS Safari, y eso también parece ser solucionado. – Chris

0

Intenta usar;

session_set_cookie_params(0, '/', '.domain.com'); 

para aplicar los parámetros de la cookie de sesión. Elimine el período prefijado si está aplicando 'no www' o no está usando subdominios.

También puede intentar llamar al session_write_close() al final de la secuencia de comandos para forzar a PHP a escribir y cerrar la sesión en ese momento (esto es especialmente útil cuando ejecuta encabezados de redirección inmediatamente después de escribir datos de sesión).

ACTUALIZACIÓN:

Trate de usar esto en su .htaccess;

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
+0

Gracias por la respuesta. Ya estoy haciendo los dos elementos que sugirió. – Toby

+0

Verifique mi respuesta revisada, hágamelo saber cómo va – TheDeadMedic

+0

Cuando utilicé su htaccess, no estaba reescribiendo mis URL de SEF particulares correctamente. Sin embargo, encontré un archivo de htaccess alternativo incluido con la última versión del framework que estoy usando ... ¡y todo está funcionando bien ahora! '# Opciones + FollowSymlinks' RewriteEngine en RewriteCond% {} REQUEST_URI ^/*!. (Temas WYSIWYG | | imágenes | js)/ RewriteRule^$ favicon.ico favicon.ico [ L] RewriteCond% {} REQUEST_FILENAME! -F RewriteCond% {} REQUEST_FILENAME! -d RewriteCond% {} REQUEST_FILENAME! -l RewriteRule. * index.php # ' – Toby

8

Resulta que el problema estaba en el contenido de mi archivo .htaccess. Esto resuelve el problema:

#<IfModule mod_rewrite.c> 

############################################ 
## enable rewrites 

    Options +FollowSymlinks 
    RewriteEngine on 

############################################ 
## always send 404 on missing files in these folders 

    RewriteCond %{REQUEST_URI} !^/.*(themes|wysiwyg|images|js)/ 

############################################ 
## always send 404 on missing favicon 

    RewriteRule ^favicon.ico$ favicon.ico [L] 

############################################ 
## never rewrite for existing files, directories and links 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 

############################################ 
## rewrite everything else to index.php 

    RewriteRule .* index.php 

#</IfModule> 
+0

Favicon! Acabo de resolver un problema similar al recordar sobre el favicon ... ¡gracias a toby! –

+0

RewriteRule^favicon.ico $ favicon.ico [L] - esto solo resolvió mi problema. ¡Gracias! – TimL

0

Parece que este problema ha reaparecido últimamente en los navegadores Chrome. He tenido un sitio funcionando durante 6 meses sin problemas y de repente ayer comenzó a tener problemas con la sobreescritura de datos de la sesión. Usando el violín pude ver que Chrome estaba intentando cargar el favicon. Mi problema también fue que tenía un enlace a "favicon.ico" en lugar de "/favicon.ico", así que Chrome agregó el favicon.ico a mi querystring, por ejemplo. /product/abc/favicon.ico que causó que la página se cargara dos veces, la segunda vez que sobrescribió los datos de la sesión. Así que mi solución era:

  1. cambio de enlace árbitro "/favicon.ico"
  2. subido un favicon
  3. añadido este a .htaccess: RewriteRule^$ favicon.ico favicon.ico [L]

El último paso se ha mencionado en varias respuestas y lo consideraría una buena respuesta, excepto que me falló porque mi referencia de enlace era "favicon.ico".

Cuestiones relacionadas