2010-04-23 24 views
7

He visto algunas respuestas a esto en SOF, pero la mayoría de ellas están relacionadas con el uso de subdominios, de los cuales ninguno me ha funcionado. El más común es que el uso de session.cookie_domain, que de mi entender solo funcionará con los subdominios.Sesiones compartidas de PHP en el dominio

Estoy interesado en una solución que se ocupa de acuerdos con dominios completamente diferentes (e incluye la posibilidad de subdominios). Lamentablemente, los plazos de los proyectos son los mismos, el tiempo no está de mi parte, así que recurro a la experiencia y experiencia de SOF.

El resumen del proyecto actual es para poder iniciar sesión en un sitio que actualmente solo almacena el user_id en la sesión y luego poder recuperar este valor en un dominio diferente dentro del mismo entorno de servidor. Los datos de sesión se almacenan/recuperan de una base de datos donde el session id es la clave principal.

Espero encontrar una solución "ligera" y "fácil" de implementar.

El sistema está utilizando un patrón de diseño de controlador de vista modelo interno, por lo que todas las solicitudes (incluidos los diferentes dominios) se ejecutan a través de un único script de arranque. Usando el nombre de dominio como una variable, esto determina qué contexto mostrar al usuario.

Una opción que parecía tener potencial es el uso de una imagen oculta y el uso de la etiqueta alt para establecer el user id. Mis primeras impresiones sugieren que esto inmediatamente parece "demasiado fácil" (si es posible) y plagado de fallas de seguridad. Disscuss?

Otra opción que consideré es utilizar el IP y el agente de usuario para la autenticación, pero una vez más siento que no va a ser una opción confiable debido a las redes compartidas y el cambio de direcciones IP.

Mi tercera opción (y preferida) que consideré y aún no he visto discutido es usar htaccess para engañar al usuario haciéndole creer que están en un dominio diferente cuando de hecho apache está redireccionando; algo así como

www.foo.com/index.php?domain=bar.com&controller=news/categoires/1
, sino que muestra al usuario como
www.bar.com/news/categories/1

foo.com representa el "dominio del sitio principal", que todas las solicitudes se ejecutan a través bar.com y es lo que el usuario que está accediendo. La solicitud del controlador dicta la página y la vista que se solicita. es posible?

¿Hay otras opciones? ¿Pros contras?

Gracias de antemano!

+0

lo sentimos olvidó mencionar, que actualmente ejecuta el sistema local (con XAMPP). Estoy usando una mezcla de nombres de dominio locales (archivo de host editado) y dominios alojados por fasthost para reenviar a mi IP. Solo he mencionado que vale la pena mencionar en caso de que esto afecte mi prueba actual. – bigstylee

Respuesta

-3

Para el beneficio de cualquier otra persona interesada en esta funcionalidad, no hay una respuesta simple, me temo. Google "Single Sign On" y volverá con la tecnología y algunas soluciones disponibles.

En cuanto a usar htaccess para ocultar el nombre de dominio, esto no es posible ya que podría usarse para actividades maliciosas.

Ahora he implementado con éxito un sistema para cumplir con mis requisitos.

+1

Esto no es una respuesta. No nos dices lo que hiciste. – Flimzy

0

¿Has pensado en usar session_set_save_handler. Puede almacenar sus sesiones en una base de datos y acceder a ellas desde cualquier dominio.

+1

Estoy usando esto. El problema es que session_id generado por PHP es diferente para cada dominio. – bigstylee

+0

¿no puedes identificar al usuario por la identificación de la sesión? usa una columna diferente en la tabla. tendrá múltiples filas para cada usuario, pero puede establecer una fila con el mismo valor. Nunca he hecho esto antes, solo tirando cosas por ahí. – Galen

+1

foo.com da una identificación de sesión de ABC123 y bar.com da una identificación de sesión de QWERTY. A menos que comparen IP/UserAgent, no hay forma (que yo sepa) de saber que ABC123 y QWERTY apuntan al mismo usuario. La consulta de la base de datos que recupera los datos de la sesión es SELECT * FROM sessions WHERE session_id = "% string". ¿O me estoy perdiendo su punto? – bigstylee

0
  1. Definir un servidor de sesión principal (hago esto en combinación con memcached)

  2. uso Ajax/JSON (P) para solicitar una sesión de este servidor, esto le permite compartir sesiones en varios dominios

  3. reutilización esta sesión