Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo unificar sesiones en un dominio

Cómo unificar sesiones en un dominio

Lograr el uso de una SESIÓN bajo múltiples nombres de dominio

Para realizar el intercambio de sesiones con múltiples nombres de dominio, primero debe comprender el mecanismo operativo de SESSION. No entraré en los conceptos básicos.

La sesión se ejecuta así:

El usuario A visita el sitio Y. Si el sitio Y ejecuta session_start() (lo siguiente supone que session_start() siempre existe), entonces se generará un session_id. generado, este ID de sesión generalmente se guardará en el usuario A en forma de COOKIE (podemos forzar que el ID de SESIÓN se pase en COOKIE configurando session.use_only_cookies en 1 en php.ini). En este momento, el ID de SESIÓN aparece como $_COOKIE['PHPSESSID'] (PHPSESSID puede modificarse mediante la función session_name())

El usuario A accede a este ID de sesión ($_COOKIE['PHPSESSID']; ']) se enviará al sitio Y cada vez que A visite Y.

En el sitio Y, habrá dicho directorio, que se utiliza para guardar los datos reales de la SESIÓN. El sitio Y recibe la identificación de la sesión, luego obtiene la asociación con los datos de la SESIÓN a través de la identificación de la sesión y devuelve los datos de la SESIÓN.

Puede que seas inteligente y ya lo hayas pensado, ya que la SESIÓN entre el servidor y el cliente se conecta a través de un ID de SESIÓN, y los datos de la SESIÓN se guardan en una carpeta específica en forma de un archivo normal. archivo. .

Entonces, si queremos implementar diferentes nombres de dominio, solo necesitamos cumplir las siguientes dos condiciones:

1) Los directorios de datos de SESIÓN de diferentes nombres de dominio se pueden unificar o actualizar. sincrónicamente. 2) Para el mismo cliente, utilice un ID de SESIÓN unificado

La realización de la primera condición.

Si es el mismo servidor no se requiere configuración.

Si está agrupado/distribuido, entonces no creo que sea necesario que diga nada. . Aquellos que pueden hacer aplicaciones distribuidas deberían tener más experiencia en compartir directorios que yo. No he probado demasiados servidores y existen razones tanto subjetivas como objetivas.

Aquí quiero hablar principalmente sobre la segunda condición: hacer que diferentes nombres de dominio tengan un ID de SESIÓN unificado.

Entonces, ¿cómo deberíamos unificarnos?

Primero, el ID de SESIÓN debe pasarse entre diferentes nombres de dominio y, dado que la cookie debe ser específica del nombre de dominio, la acción de transferencia la completa el cliente. Si el cliente no completa el proceso de entrega, entonces el nombre de dominio que se entrega no sabe para qué cliente es.

El segundo paso es modificar el ID de SESIÓN bajo el nombre de dominio que acepta la transferencia.

Cómo pasar:

En HTML, podemos usar muchos métodos. Por ejemplo

iframe

o .js

O un elemento img html

Siempre que se puede llamar. Una dirección determinada será suficiente.

En wml, debido a las características del script wml, no podemos llamarlo en forma de script y no hay iframe en wml, pero aún podemos transferirlo a través de img.

Cómo modificar:

Dado que el ID de SESIÓN generalmente se pasa a través de COOKIE, solo necesitamos pasar $_COOKIE['PHPSESSID'];.

Pero si PHPSESSID se cambia por session_name, tenemos que modificar PHPSESSID en setcookie. Esto será muy problemático. . Entonces podemos elegir una función específica de la sesión session_id para modificar $_COOKIE['PHPSESSID'];

Algunos puntos a tener en cuenta:

Si session.use_only_cookies es 0 (valor predeterminado de PHP), luego, la identificación de la sesión se puede pasar en URL u otras formas session_id() y session_name debe usarse antes de session_start()

La siguiente es una clase simple que escribí para implementar múltiples nombres de dominio. Si no comprende lo anterior, puede consultar mi clase de nombre de dominio múltiple. Esta clase se implementa en forma de iframe en HTML.

' ;}devuelve verdadero;}función get(){session_id($_SERVER['QUERY_STRING']);session_start();devuelve verdadero;}función _set($urls){$obj=new mdSession();return $obj-> set($urls);}función _get(){$obj=new mdSession();return $obj->get();}}?>?index.php :?ses_get.php?b.php :?session_start();var_dump($_SESSION);? ¿Primero visite /a.php y luego /b.php para ver el efecto? ​​En Firefox y Google Chrome No hay problema, pero todavía no funciona en Ie