PHP ID de Sesión cambiando en cada solicitud

Acabo de migrar mi aplicación de un local WAMP para la real en el servidor en línea. Esto ha causado problemas con el ID de sesión no se guardan como parece.

  • He comprobado para caracteres no deseados se obtienen antes de session_start
  • Me parece que no puede encontrar cualquier archivo de sesión se guardan en mi /tmp

Estos son mis configuración de la sesión:

session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /tmp    /tmp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0
  • El servidor en línea que se está ejecutando: Versión de PHP 5.3.9 mientras que el WAMP es: Versión de PHP 5.3.5.
  • Mediante la visualización de las cabeceras enviadas y la respuesta en cada carga de la página tengo el siguiente, el set-cookie se envía el correspondiente identificador de sesión y la respuesta recibida envía uno nuevo como si nada de lo que fue solicitado.
  • Estoy ejecutando el sitio en una vista previa de la dirección URL de SSL (en). No sé si esto tiene algo que ver, mi dominio no está registrado todavía.
  • Código de Error es tan simple como:

    $sId = session_id();

    if ($sId == '') { session_start(); }

  • Gracias por todas las respuestas. Estoy empezando con session_start(); ahora, y yo no soy la comprobación de la session_id() hasta más adelante en la ejecución (sólo para descubrir que uno es). Mi Id de sesión es todavía refrescante en cada solicitud sin que me de llamar a un regenerar Id o algo similar. Simplemente session_start -> tienda de algunas variables -> la ejecución final (debe write_close) -> página siguiente solicitud -> Id y las variables de sesión no existen.
  • Como parece que fue el anfitrión de la página de vista previa de problema. Gracias a todos por sus respuestas!
InformationsquelleAutor altereg0 | 2012-11-09

7 Kommentare

  1. 12

    Yo sólo tenía y resuelto el mismo problema.

    Resulta que la cookie PHPSESSID (que mantiene un registro de la sesión) ha sido enviar pero fue ignorado por el servidor, por lo que la sesión no se mantuvo y el servidor se reinicia la sesión cada vez que la página se vuelve a cargar o cambios.

    El problema era que yo tenía en mi wp-config.php esta línea:

    @ini_set('session.cookie_secure','On');

    Esto significa que si la conexión no es segura, cada una de las cookies es la de ser ignorado, por lo tanto, el servidor de la cookie PHPSESSID y la sesión se ha reiniciado.

    Comprobar su wp-config.php o su init.php. Es un problema con las cookies.

  2. 2

    Debe tener para escribir session_start(); antes de acceder a las variables de sesión, sin necesidad de que usted no será capaz de acceder a las variables de sesión.

    Tratar de poner session_start() en la primera línea del archivo.

  3. 1

    session_start debe ser la primera cosa en su archivo, usted puede obtener el identificador de sesión después:

    session_start();
    $sId = session_id();
  4. 1

    Pregunta es antiguo y el problema ha sido resuelto por seguro. Sin embargo, las anteriores respuestas no ayuda en esa situación, con el tiempo. Así que, si alguien del encuentro con problema similar como lo hice yo, aquí es otro enfoque:

    Sesiones se gestionan mediante una cookie, que generalmente se llama PHPSESSID. Si esa cookie no está declarado correctamente y por lo tanto no puede ser incluido con éxito las solicitudes de usuario otra sesión se inicia en cada solicitud resultante en situación, al menos, similar a la suya.

    Yo estaba tratando de implementar una aplicación que se ejecuta detrás de algunos de proxy inverso asignación de direcciones Url públicas para múltiples aplicaciones, como por ejemplo

    http://public.example.com/foo/bar/script.php

    fue delegada a algún servidor detrás de proxy inverso proporciona como

    http://foo.example.com/bar/script.php

    Para PHP se ejecuta en el contexto de foo.example.com con el prefijo de la ruta de /bar en lugar de /foo/bar ajuste de los parámetros de la cookie de sesión de PHPSESSID podría causar problemas cuando se pasa a cliente sin corregir. Esta observación fue cierto en mi caso, al menos.

  5. 1

    Utilice sólo caracteres alfanuméricos, como el IDENTIFICADOR de Sesión. He tenido este problema cuando se utiliza «.» como parte de la IDENTIFICACIÓN de la Sesión.

  6. 1

    Puede ser causada por tres caracteres (BOM (Marca De Orden De Bytes)) que se inyecta por ciertos programas (es decir, dreamweaver, notepad) antes de la <?php marcador, por lo tanto thesession es, de hecho, no se ha inicializado.

    Si usted tiene error_reporting habilitado, podrá ver headers already sent..

    Comprobar el archivo con un editor hexadecimal para ver si su editor inyectado cualquiera de los caracteres.

  7. 0

    Primero debe iniciar sesión para utilizar session_* funciones. Así que la primera cosa que usted necesita hacer es:

    session_start();

    entonces usted puede hacer para id de sesión como esta

    $id = session_id();

    Tenga en cuenta que no se recomienda guardar las sesiones en la carpeta pública que está disponible al público desde el que los visitantes podían encontrar la carpeta donde guardar las sesiones y una lista de todos ellos. Entonces se podría inyectar cookie de sesión en su navegador y tomar el control de otros visitantes de cuentas de usuario. Si usted realmente necesita para hacer esto, limitar el acceso a la carpeta /tmp. Por ejemplo poner .htaccess en la carpeta con este código

    Deny from all

    O encontrar otra manera de desactivar a los usuarios del navegador de tu carpeta /tmp ya que esto puede ser un problema de seguridad.

    Si quieres cambiar el id de sesión en cada solicitud, por razones de seguridad, puede utilizar session_regenerate_id función

    Puede hacer algo similar a esto:

    session_start();
    session_regenerate_id();
    //Do other things you want with sessions.

    De esta manera, incluso si alguien le roba su cookie de sesión, id de sesión, se cambiaba en cada solicitud. Y este podría ser su problema. Hay una manera de PHP para regenerar el nuevo identificador de sesión en cada solicitud, por lo que esta podría ser la cosa que le molesta.

    Tan lejos como la configuración de php.directivas ini, usted debe comprobar si su proveedor de hosting le ha permitido cambiar .ini directiva está tratando de cambiar. Depende de la instalación del servidor si se puede cambiar .directiva ini o no. Y la forma en que las sesiones de comportarse puede ser diferente de alojamiento de alojamiento, dependiendo de su configuración de servidor. La mayoría de las cosas se pueden cambiar usando las funciones de php, o el uso de ini_set con esta lista de directivas php.directivas ini

    • Lo siento, yo no lo podría haber dejado claro que quiero mantener el mismo Identificador de sesión, en cada solicitud y se restablece sin mí llamar a regenerar. Gracias.
    • Bueno, entonces supongo que el identificador de sesión se regenera en cada reqeuest. ¿Qué tipo de aplicación es eso? ¿Usted escribió todo formulario de cero, o de sus mvc framework? Usted debe inspeccionar el código y comprobar si la sesión llega regenerado, o pregunte proveedor de host hacer que regenerar las sesiones.
    • He comprobado las propiedades de la sesión en PHP y no parece ser reiniciarlo. Voy a publicar una pregunta para el proveedor en caso de. Si nada viene a la mente por favor no dude en ponerse en contacto conmigo de nuevo. El guión está escrito desde cero, estoy usando el buffer de salida y la de inicio de la sesión antes de nada es arrojado. Así que esto es inexplicable. De los errores también son en algo así sería si se trataba de una salida del problema. Gracias de nuevo.
    • Bien, entonces podría ser el problema con el servidor. Tal vez lo creó para regenerar el identificador de sesión para la seguridad. No sé realmente. Tendría que echar un vistazo al código o la instalación del servidor para ayudarle mejor con esto.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea