2012-03-12 22 views
5

Necesito utilizar las cookies de dominio principal para mis subdominios como con mayor prioridad cuando existen las cookies de dominio secundario y principal.¿Cómo se lee la cookie principal del subdominio con una cookie de subdominio existente en PHP?

El problema es cuando estoy en sub.domain.com y existen galletas para

  • sub.domain.com
  • .dominio.com

El PHP global $_COOKIE contiene $_COOKIE['data'] == 'sub.domain.com'. Me gustaría comprobar si también hay una cookie .domain.com y usarla.

¿Cómo leo la cookie principal cuando estoy en un subdominio con una cookie de subdominio existente?

Respuesta

2

Hay una variable $_SERVER ['HTTP_COOKIE'] que contiene las variables de subdominio y de dominio principal de las cookies con el mismo nombre que una cadena grande. En el siguiente fragmento de código simple de la matriz $cookie_variable contendrá tanto los valores de las variables específicas:

if('sub.domain.com' == $_SERVER['HTTP_HOST']) { 
    $var_name = 'somedata'; 
    $domains_counter = 0; 
    foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) { 
    if(false !== strpos($cookie_variable_string, $var_name.'=')) { 
     $cookie_variable[$domains_counter] = urldecode(
      trim(
       substr(
        $cookie_variable_string, 
        strpos($cookie_variable_string, $var_name) + strlen($var_name.'=') 
      ) 
     ) 
    ); 
     $domains_counter++; 
    } 
    } 
    var_dump($cookie_variable); 
} 

Aquí es una función que recibe todas las variables:

public static function get_http_cookie_variables() { 
    $domains_counter = []; 
    foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) { 
    $key_value = explode('=', $cookie_variable_string); 
    $cookie_var_name = trim($key_value[0]); 
    if(is_null($domains_counter[$cookie_var_name])) { 
     $domains_counter[$cookie_var_name] = 0; 
    } 
    $http_cookie_variables[$cookie_var_name][$domains_counter[$cookie_var_name]] = urldecode(trim($key_value[1])); 
    $domains_counter[$cookie_var_name]++; 
    } 

    return $http_cookie_variables; 
} 
+0

La función get_http_cookie_variables() falla porque $ domains_counter no se ha inicializado. Simplemente lo eliminé por completo, ya que no estoy interesado en eso. – user603749

4

Parece que la esencia de su problema es leer un conjunto de cookies en domain.com desde sub.domain.com.

Añadir

session.cookie_domain = .domain.com

a su php.ini para que esto suceda. Si estás en un entorno de alojamiento compartido y no se puede modificar el archivo ini, intentar tener esto en alguna parte en el código:

ini_set("session.cookie_domain", ".domain.com");

Ahora debería ser capaz de acceder a las cookies de domain.com en el subdominio .dominio.com.

+0

darle las gracias por la respuesta, pero esto es un cambio demasiado globales que prefiero evitar si es posible, porque hace que la sesión sea global para todos los subdominios. Quiero que las sesiones se separen para subdominios. Solo necesito leer parte de la cookie del dominio principal. Ya puedo acceder a la cookie de dominio principal, pero solo si no hay una cookie de subdominio, que por alguna razón es preferida por el servidor. ¿Hay forma de leer ambas cookies al mismo tiempo? – mvladk

+0

El uso del método 'ini_set()' debe garantizar que los cambios en la configuración solo afecten a su sitio durante la vigencia de la solicitud (si le preocupa que los cambios afecten a otros sitios que se ejecutan en su servidor). –

+0

Jahufar muchas gracias! Estoy muy agradecido por tu participación. – mvladk

Cuestiones relacionadas