La técnica de HTTP es un protocolo sin estado, eso significa no tener un método incorporado para conservar el estado entre varias transacciones de un mismo usuario.
Al solicitar una página desde Internet y después otra y otra, HTTP no cuenta con ninguna técnica para poder saber que dichas peticiones son solicitadas, por el mismo usuario a nuestro servidor Web.
La tecnología PHP si incluye funciones de programación con enfoque de control de sesión, cuando realizamos páginas en HTML y PHP con la variable global $_SESSION o $_COOKIE.
Cómo funciona las Sesiones en PHP ($_SESSION) ?
Se controlan por un sólo id de sesión, un número criptográficamente aleatorio, generado por PHP y que se almacena en el lado del cliente mientras dure la sesión. Dicha sesión se puede almacenar en forma de Cookie en el lado del Cliente (PC) o pasar dicho id por GET o POST por medio de la URL.
Dicho identificador id de Sesión actúa como una clave que permite grabar sendas variables en la variable global $_SESSION, en la parte del Servidor.
Existe dos fomas diferentes para generar sesiones en php, una de ellas es con la función de PHP : session_start(); y la otra configurar el php.ini para que lo realice automáticamente con la opción session.auto_start.
La función session_start(); la podemos invocar en todas nuestras páginas PHP y podremos acceder a las variables de la matriz global de $_SESSION desde nuestro servidor web.
Si al invocar dicha función ya existe el id de sesión, no vuelve a generar otro id, deja el ya generado con el primer session_start(); , de esa forma no perdemos nuestras variables de sesión al cambiar de páginas, por ser el mismo número id inicial de sesión.
Cómo funcionan las Cookies o variable $_COOKIE?
Una cookie es información que el Servidor puede grabar al lado del Cliente, el comando es :
setcookie() :
nombre=VALOR; [expires=FECHA;] [path=RUTA] [domain=NOMBRE_DOMINIO;] [secure]
Cuando un navegador se conecta a una dirección URL, primero busca las cookies almacenadas localmente. Si no son relevantes para dicha dirección se devuelven al servidor.
Con lo expuesto podemos con PHP, grabar información (Variables de Sesión) y después en las siguientes páginas leer dicha información, a través de la variable global $_COOKIE[‘mycookie’], y recuperar los datos necesarios para poder seguir procesando las peticiones del usuario.
Las cookies tienen algunos problemas y son que algunos navegadores no las aceptan o que los usuarios desactivan las cookies en sus navegadores.
Para saber si un navegador acepta las cookies, es necesario generar la cookie con la función setcookie() en el PC del cliente, salir de la página que ha generado la cookie y volver a leer la cookie generada con otra página.
Si al leer la cookie la variable global $_COOKIE nos da un valor nulo es que no admite el ordenador las cookies.
El motivo de salir y volver a entrar en la página, es porque no es cargada la variable global $_COOKIE , hasta que no ha salido de la página que ha creado la cookie para su lectura.
CONCLUSIONES :
Según lo expuesto, personalmente prefiero trabajar con cookies y no con sesiones, en estos años de programación (que son muchos), no he tenido problemas con ellas, simplemente que al inicio de sesión (Cuando pido usuario y contraseña), detecto la prohibición de grabar la cookie en el ordenador del cliente, y le aviso indicando que active las cookies en su navegador.
Pero todo depende de la importancia del proyecto, también puedes utilizar las dos posibilidades, si detectas que no admite cookies, puedes optar por trabajar con sesiones vía url y una vez que tengas tus variables, las pasas a matrices para su posterior proceso en el servidor.
La conclusión final , es que la página web o el servidor se tiene que adaptar a las características del usuario que está visitando nuestras páginas y no al revés.
Saludos.