2011-08-15 11 views
5

Tengo un manejo de sesión básico en mi aplicación. En cada página verifico si el usuario está conectado. Si lo están, ya están identificados por $_SESSION['user_id'], y su inicio de sesión/cierre de sesión se registra en una tabla MySQL.¿Cómo obtener/configurar session_id() o debería generarse automáticamente?

También me gustaría registrar visitas de invitados (sin iniciar sesión) basadas en una identificación única. Supuse que una vez que se llama session_start() se genera automáticamente un session_id interno y que llamando al session_id() podría recuperarlo. Pero esto solo da un error de "variable indefinida", así que supongo que tengo que configurarlo manualmente ...? Si es así, ¿cuál es la mejor manera para que sea una identificación única, o cuál es el método habitual?

Gracias por cualquier ayuda ...

Respuesta

27

Hay 2 maneras de usar las sesiones y las sesiones de identificación en PHP:

1 - Generar automáticamente el ID de sesión y conseguir que:

session_start(); 
$id = session_id(); 

2 - Establecer el identificador de sesión manualmente y luego iniciarlo:

session_id('mySessionId'); 
session_start(); 

Si tiene intención de conjunto el ID de sesión, debe configurarlo antes de llamando session_start(); Si tiene la intención de generar una session_id aleatorio (o continuar uno ya iniciado en una solicitud de página anterior) y luego conseguir que Identificación para su uso en otros lugares, debe llamar session_start()antes de intentar utilizarsession_id() para recuperar el identificador de sesión.

+0

Lo sentimos, se borró el último comentario. ¡Ahora veo mi error! Gracias por esta información – grai

+0

No hay problema :) Me alegro de poder ayudar – Brian

1

Aquí se puede ver que funciona para mí (la sesión se inicia en silencio): http://sandbox.phpcode.eu/g/f6b6b.php

que se olvidó de iniciar la sesión, probablemente

+0

Sí, acabo de probarlo en una página de prueba y funciona como sugieres. Pero en mi aplicación estoy usando una clase para mis sesiones, y solo llamo a session_start() una vez desde dentro del constructor. Así que el problema parece ser solo con obtener/establecer session_id() en un método de clase, pero no hay problemas para configurar/obtener vars en el array $ _SESSION ... Gracias, sin embargo, no sabía que comenzaba silenciosamente. – grai

+0

@grainne: nonono, no me entendiste. Es el comportamiento de mi sandbox: la sesión se inicia automáticamente, por lo que no se puede ver dentro de "show code", primero tienes que 'session_start()' y luego puedes usar 'session_id()' – genesis

+0

Gracias por explicarme. Ahora entiendo lo que dices, la primera vez pensé que era solo un código pegado. No estoy seguro de lo que me estaba sucediendo a continuación:/Voy a tener que hacer algunas pruebas adecuadas de todo esto más tarde ... – grai

0

Bueno, puede ser un poco extraño, pero cuando necesito ID único que utilizar uniqid()

+0

No sabía de esto :) Creo que lo que haré entonces es usar algo como $ _SESSION ['guest_id'] con uniquid, ya que session_id() no funciona por el motivo que sea. – grai

Cuestiones relacionadas