PHP - No me funcionan las sesiones PHP en el servidor

   
Vista:

No me funcionan las sesiones PHP en el servidor

Publicado por LumAuro (7 intervenciones) el 16/09/2017 01:46:02
Hola a todos,

He buscado información que me ayude con este caso en particular, pero no he dado con la causa del problema...

Tengo un sitio de uso personal en un alojamiento gratuito y hasta hace poco todo funcionaba correctamente, pero de un tiempo para acá no se guardan las cookies de sesión en el navegador (todos aparentemente) y no he logrado encontrar la causa del problema.

Lo más obvio era revisar las restricciones de cookies en el navegador pero no hay ninguna, incluso lo configuré para permitir expresamente la url del sitio web sin éxito.

Luego probé en otros navegadores así como en otros PC y dispositivos móviles (tablets y smartphones) y en todos se mantiene el mismo problema, por lo que concluí que podría ser el servidor.

Para aislar el problema creé un archivo de prueba 'probarsesion.php' en el servidor con el siguiente código:

1
2
3
4
5
6
7
<?php
	session_start();
	echo session_id()."<hr/>";
	print_r($_SESSION);
	$_SESSION['validar'] = "OK";
	echo '<hr/><a href="">Recargar</a><hr/>';
?>

No podía ser más simple. Si la sesión se guardaba el SID (primera linea visible en el navegador) debía ser el mismo entre llamadas, y la siguiente línea debía simplemente mostrar la variable de sesión 'validar' con su valor 'OK' de la segunda llamada en adelante (lógico ¿no?)

¡ Tampoco funcionó !

subí el mismo código a otro servidor y funcionó tal como se esperaba, lo que me confirma que el problema está en el servidor, pero... ¿porqué?

Lo único que me ha llamado la atención es que ese servidor en particular usa PHP versión 7.1.7 mientras el otro (dónde funcionó) está en la versión 7.0.19, pero no estoy muy seguro si eso tiene alguna relación aunque en el sitio de PHP no se refieren conflictos de compatibilidad, de todas formas sí hay cambios en las variables de configuración entre versiones.

También he revisado los archivos de sesión en el servidor y efectivamente existen para cada SID que se ha creado, aunque no estoy seguro de que guarden información en sí mismos porque no parecen contener datos; en realidad no he encontrado documentación de dónde se guardan las variables de sesión (siempre supuse que en el archivo).

Ya no encuentro que más revisar, cualquier orientación la agradezco; ¿alguna sugerencia?

Dejo también los enlaces de los sitios publicados para que podáis probarlo vosotros mismos, y si de casualidad a alguno le funciona correctamente sin modificaciones le ruego que me cuente en cual navegador, versión y cual configuración podría estar haciéndolo funcionar, aunque debería funcionar sin problemas en cualquiera salvo que la cookies estén restringidas; como os dije he probado en varios nevegadores, equipos de escritorio y dispositivos siempre con el mismo resultado (tengo uno que aún conserva la cookie del SID que funcionaba anteriormente y en ese en particular no cambia el SID pero tampoco guarda la variable de sesión entre lllamadas):

http://diariobebe.site50.net/probarsesion.php ... el del problema
http://abogadolm.4sql.net ... el de control (que funciona según lo esperado)

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No me funcionan las sesiones PHP en el servidor

Publicado por Miguel (211 intervenciones) el 16/09/2017 18:15:47
Hola,

Revisa el valor de la variable 'session.gc_maxlifetime' de PHP; si es servidor privado utiliza el php.ini o si es hosting ve a las configuraciones de PHP (donde te permite escoger la versión).


Saludos


***
El cPanel tiene el 'MultiPHP INI Editor', allí puedes configurar la variable que mencioné anteriormente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 18/09/2017 20:27:53
Hola Miguel, gracias por responder.

La variable de configuración que me dices ya la había revisado y está en 1440, de hecho está igual en los dos servidores (el que me funciona y el que no)

La comparativa de todas las variables de configuración session en ambos servidores es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Versión PHP	7.0.19	7.1.7
Página	abogadolm	diariobebe
Session Support 	enabled	enabled
Registered save handlers 	files user	files user
Registered serializer handlers 	php_serialize php php_binary	php_serialize php php_binary wddx
Directive	Local Value	Local Value
session.auto_start	Off	Off
session.cache_expire	60	180
session.cache_limiter	nocache	nocache
session.cookie_domain	no value	no value
session.cookie_httponly	Off	Off
session.cookie_lifetime	86400	0
session.cookie_path	/	/
session.cookie_secure	Off	Off
session.entropy_file	no value	NO EXISTE
session.entropy_length	0	NO EXISTE
session.gc_divisor	500	1000
session.gc_maxlifetime	1440	1440
session.gc_probability	1	1
session.hash_bits_per_character	4	NO EXISTE
session.hash_function	0	NO EXISTE
session.lazy_write	On	On
session.name	PHPSESSID	PHPSESSID
session.referer_check	no value	no value
session.save_handler	files	files
session.save_path	/php_sessions	/storage/ssd4/168/1704168/tmp
session.serialize_handler	php	php
session.sid_bits_per_character	NO EXISTE	5
session.sid_length	NO EXISTE	26
session.upload_progress.cleanup	On	On
session.upload_progress.enabled	On	On
session.upload_progress.freq	1,00%	1,00%
session.upload_progress.min_freq	1	1
session.upload_progress.name	PHP_SESSION_UPLOAD_PROGRESS	PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix	upload_progress_	upload_progress_
session.use_cookies	On	On
session.use_only_cookies	On	On
session.use_strict_mode	Off	Off
session.use_trans_sid	0	0

Perdón por el desorden, no supe como mostrar una tabla en este editor y no me funcionó ni con [ ] ni con < >, por lo que opté por dejarla así en modo código; espero que se entienda.

Ya que mencionas las variables de configuración, me llamaron la atención las nuevas de la versión 7.1 de PHP (session.sid_bits_per_character y session.sid_length) pero no tengo muy claro como cambiarlas si es que es necesario; probé 4 y 32 respectivamente, siguiendo el manual PHP, por aquello de que session.hash_bits_per_character era 4 en el servidor que me funcionaba, pero no hubo resultado favorable así que las volví a dejar como vienen por defecto en espera de una mejor explicación.

Un comentario adicional: El el servidor no tengo acceso a php.ini (alojamiento gratuito) por lo que debo configurar los cambios a través de ".htaccess"

Gracias por tu apoyo, y si tienes otra sugerencia la agradeceré también.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

No me funcionan las sesiones PHP en el servidor

Publicado por kip (868 intervenciones) el 18/09/2017 20:40:56
Hola, fijate en esto:

1
session.cookie_lifetime	86400	0

Modifica ese valor al adecuado y quizas ya deberia funcionarte.

Por que necesitas modificarla ? Pues bien esta es la que define el tiempo de vida de la sesión.
https://blogs.oracle.com/oswald/php:-sessiongcmaxlifetime-vs-sessioncookielifetime

Lo que me resulta interesante tambien es esto

1
/storage/ssd4/168/1704168/tmp

Puedes verificar que exista el path ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 18/09/2017 21:33:32
Gracias a ti también kip,

La ruta existe, todo lo que está ante de '/tmp' es la ruta del usuario en el alojamiento compartido (supongo), pero he verificado la ubicación '/tmp' que tengo visible por FTP y allí efectivamente se crean los archivos session con el SID indicado, por lo que creo que es la misma ubicación.

Ya he cambiado lo que me propones (en .htaccess) así:

php_value session.cookie_lifetime 86400
php_value session.gc_maxlifetime 86400
php_value session.gc_divisor 1000

Pero sigue sin funcionar

Una duda: Tenía entendido que 'cookie_lifetime 0' significaba duración ilimitada, ¿es correcto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

No me funcionan las sesiones PHP en el servidor

Publicado por kip (868 intervenciones) el 19/09/2017 04:37:12
Tienes razon en el valor de 0, pero bueno el intento no va de mas.

Ahora bien, entonces el path existe, te fijaste que el usuario que corre los scripts PHP, en este caso de seguro es el www-data, tenga los permisos para escribir, borrar y leer sobre esta carpeta ?

Otra cosa que podrias verificar es si tienes espacio libre en el disco, quizas por eso no se guarden las sesiones dentro del path....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 20/09/2017 23:04:41
Hola kip,

Sí, sí tiene permisos de escritura y hay suficiente espacio, de hecho los archivos session se crean en la ruta indicada, de lo que no estoy seguro es si se escriben datos en ellos; pero lo que más me ha llamado la atención es que el navegador no conserva la cookie PHPSESSID, es como si hubiera algún problema en el procesamiento de la misma, a pesar de que no hay restricciones de cookies en el navegador y además no importa el navegador en que lo pruebe.

¿has probado los enlaces?, agregué la variable GET 'vertodo' (basta invocarla sin valor) para mostrar el estado de la rutina y además phpinfo, por si eso ayuda a diagnosticar el problema.

Agradezo tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

No me funcionan las sesiones PHP en el servidor

Publicado por kip (868 intervenciones) el 21/09/2017 04:46:34
Intenta colocando otro path para el almacenado de los archivos de sesion, por ejemplo:

1
ini_set('session.save_path', $_SERVER['DOCUMENT_ROOT'] . '/sesiones');

O

1
session_save_path($_SERVER['DOCUMENT_ROOT'] . '/sesiones');

No olvides que sesiones sera una carpeta que debes crear.

Cuentanos como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 21/09/2017 18:16:40
Lo probé pero, aunque la carpeta 'sesiones' quedó creada con permisos 775, la variable 'session.save_path' no cambia ni con la función 'ini_set' ni con la función 'session_save_path'; ni siquiera mediante la directiva 'php_value' del archivo .htaccess. Parece que el servidor tiene restringida esa modificación.

De cualquier forma amplié los permisos de la carpeta '/tmp' a 775 (por vía FTP), pero todo sigue igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 21/09/2017 22:55:21
hola de nuevo,

En nuestro esfuerzo me había surgido la duda de cómo se relacionaban los archivos en el servidor con la cookie PHPSESSID, gracias a ello se me ocurrió si no sería específicamente un problema de cookies, y agregué un set cookie para probarlo...

El caso es que descubrí que tampoco se guardaba ninguna otra cookie (ni mostraba error que es lo más extraño), mi suposición era que el servidor agrega algo a la salida antes de ejecutar el script por lo que envié un ticket específico; el staff del alojamiento negó que se adicionara algo a la salida pero resolvieron el problema agregando el siguiente código al .htaccess:

1
php_flag output_buffering on

Me quedé con la curiosidad, ¿si no se agrega nada a la salida antes de session_start para qué controlarla con un búfer? Pero el caso es que el búfer de salida sí solucionó el problema aunque ¿a qué precio?, eso lo veré luego.

Gracias kip por tu apoyo, me ayudó a enfocar el problema que sí era de servidor, pero no como estábamos pensando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

No me funcionan las sesiones PHP en el servidor

Publicado por Lum (7 intervenciones) el 18/09/2017 21:10:08
Una nota adicional: aunque el cpanel de 000webhost (lo cambiaron recientemente) es diferente a todo lo que había visto antes, encontré como cambiar la versión de php; pero aún cambiándola a versiones anteriores (probé hasta 5.5) se mantiene el error de que no guarda la sesión en el navegador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad