2012-02-05 37 views
9

Tengo un sitio web www.example.com. Eso tendrá múltiples subdominios que funcionan con una sola aplicación o programa. Por ejemplo, login.example.com le permitirá al usuario iniciar sesión en el sitio mientras system.example.com le permitirá al usuario acceder a un sistema de información, mientras que forums.example.com le permitirá al usuario acceder a los foros.Compartiendo SESIÓN Variables entre varios subdominios

Es posible que tengamos que pasar información entre los subdominios, como una identificación de usuario, o una preferencia de usuario, etc. ¿Cómo hacemos para pasar información entre los sudomains usando las variables de SESSION?

EDIT: me gusta esta idea:

A medida que el primero que en el script: ID de sesión

ini_set('session.cookie_domain', '.example.com'); 
+1

¿Es posible duplicar? [Permitir que las sesiones de php se transfieran a los subdominios] (http://stackoverflow.com/questions/644920/allow-php-sessions-to-carry-over-to-subdomains) – Josh

+2

¿Piensa utilizar la MISMA sesión en todos de los subdominios o le gustaría que la información de la sesión se aísle por subdominio? Si alguna vez expande y mueve un subdominio a otro servidor físico, esto podría ser problemático si comparte la sesión en todos los dominios. O tendría que cambiar al almacenamiento de sesión basado en memoria/base de datos al que todos los servidores podrían acceder. – drew010

+0

Planeo usar la MISMA sesión en todos los subdominios. Sin embargo, otro inconveniente puede ser que tengo varios dominios en un servidor. ¿Qué haría entonces para mantener las sesiones separadas entre los dominios regulares, pero solo para los subdominios? –

Respuesta

13

PHP se guardan en cookies. Para hacer que una cookie esté disponible en todos los subdominios, debe asignarla al dominio raíz. Luego, todos los subdominios obtendrán la identificación de la sesión de la cookie y PHP puede encontrar la sesión usando la id de sesión pasada.

Como resultado, sólo tiene que establecer el session.cookie_domain al dominio raíz en php.ini archivo

session.cookie_domain = ".example.com" 

También compruebe manual para diferentes enfoques utilizados para establecer una entrada ini.

+0

¿Qué sucede si está utilizando un servicio de alojamiento en el que tiene más de un dominio? Ejemplo sería example1.com, example2.com, example3.com. ¿Qué harías tú entonces? –

+1

Agregue 'php_value session.cookie_domain .example.com' en el archivo' .htaccess' para cada uno de sus dominios –

+1

Disculpe, por lo que debería agregar eso como "php_value session.cookie_domain.ejemplo.com?" ¿Correcto? –

9

1) los subdominios deben utilizar la misma ruta para guardar archivos de sesión

2) modificar

php.ini session.cookie_domain = ".example.com"

o .htaccess php_value session.cookie_domain .example.com

o en el interior de la secuencia de comandos ini_set('session.cookie_domain', '.example.com');

+0

¿Qué sucede si está utilizando un servicio de alojamiento en el que tiene más de un dominio? Ejemplo sería example1.com, example2.com, example3.com. ¿Qué harías tú entonces? –

+0

@KevinOluseunKarimu Nada por las cookies, no funciona de esta manera. Puede adjuntar una identificación de sesión a los enlaces que conducen a otro dominio, en otro dominio obtendrá esta identificación de sesión y comenzará la sesión. El requisito sobre las carpetas de sesión compartidas todavía está aquí. – Cheery

+0

¿Cómo obtengo la identificación de sessiom para poner en los enlaces? –

2

puede utilizar cookies. verifique el parámetro path en setcookie() que hace que esa cookie esté disponible para todo el dominio. Las desventajas de esto son las personas que desactivan las cookies (modos de navegación privados)

otro método sería por passing the sessionID around using links o <input> campos ocultos (para formularios).

ya que sitios web separados no comparten sesiones (hasta donde yo sé, ya que los subdominios son técnicamente "lugares diferentes" entre sí), no use sesiones para almacenar en el lado del servidor. en su lugar, use una base de datos para manejar sus sesiones. De esta forma, varios sitios pueden compartir la misma tabla de seguimiento de sesión.

+0

¿Qué sucede si usa un servicio de alojamiento donde tiene más de un dominio? Ejemplo sería example1.com, example2.com, example3.com. ¿Qué harías tú entonces? –

7

he encontrado una solución a mi problema:

session_name("2620368ghwahw90w"); 
session_set_cookie_params(0, '/', '.mydomain.com'); 
session_start(); 

Esto parece funcionar sin ningún problema. ¿Es este un buen método con bajo riesgo de seguridad?

3

Antes de crear su sesión en archivo PHP, añadir esta línea a primera línea:

<?php 
//session cross to sub domain 
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 
0

he estado dando vueltas con esto durante un tiempo, y lo que funcionó para mí es colocar el código de abajo:

session_name("some_session_name"); session_set_cookie_params(0, '/', '.some_domain.com'); session_start();

a través de todos los subdominios que utilizarán las variables de sesión. Configuré esto al principio de mi archivo index php y funciona. Espero que esto lo aclare.

Cuestiones relacionadas