2009-12-11 25 views
7

Acabo de terminar un examen final en aplicaciones web. Completar lo que había sido un examen bastante fácil (aunque extenso, de 12 páginas) fue una pregunta que nos pedía que codificáramos una implementación de sesiones, similar a la realizada por javax.http.HttpSession.¿Cómo se implementa HttpSession?

Detesto admitir, me dejó perplejo. Desarrollé una implementación bastante BS usando un HashMap e hice una locura con un mapeo aleatorio de cadenas de cookies a un HashMap serializado en el servidor, pero estoy bastante seguro de que es falso ... y ahora me muero por saber cómo es en realidad hecho.

Particularmente como alguien que ha usado PHP extensamente pero por alguna razón nunca se molestó en aprender la magia detrás de la conveniencia, estoy muy interesado en aprender más sobre las implementaciones subyacentes de las sesiones. J2EE y PHP seguro, pero cualquier otro lenguaje/framework también es genial. ¡Gracias!

Respuesta

8

Según tengo entendido, estás cerca.

Según mi entender, una cookie con lo que es esencialmente una "ID" MD5 se guarda en el lado del cliente y se entrega a través de cookies o GET modificado.

En el lado del servidor, los datos de "sesión" con sessionID coincidente se guardan en un archivo temporal (en Linux está predeterminado en/tmp). El directorio de sesión creo que se puede establecer en el archivo PHP.ini.

+1

+1, resumen muy conciso. En PHP también puede implementar sus propios manejadores de control de sesión muy fácilmente, en caso de que quiera usar una base de datos u otra fuente para sus datos de sesión. Esencialmente, una sesión es simplemente un conjunto único de datos con algunos métodos para interactuar con ella (guardar, actualizar, eliminar), y los datos están vinculados a un usuario a través de un pequeño token identificable, es decir. una cookie o parámetro GET – zombat

+1

Probablemente valga la pena mencionar que los nombres de las cookies son JSESSIONID y PHPSESSIONID, respectivamente. Tampoco es necesario que sean necesariamente cookies. Pueden ser parte de la URL como; jsessionid = o; phpsessionid = . –

+0

Una buena forma de entender el lado HTTP de las sesiones es algo así como los encabezados HTTP: https://addons.mozilla.org/en-US/firefox/addon/3829 –

1

Como es una interfaz, puede ver las clases que la implementan en un contenedor web de código abierto como Tomcat, y compruébelo usted mismo.