2010-07-28 14 views
5

Me estoy tirando de los pelos tratando de resolver esto. No puedo hacer que Bootstrap funcione correctamente cuando está fuera del directorio de Drupal. Funciona bien si ejecuto este código en el directorio de Drupal, pero subir un nivel no funciona.Drupal: utilizar boostrap para comprobar que el usuario que ha iniciado sesión fuera de Drupal no está trabajando

Mi ruta Drupal es/public_html/drupal /. El script que estoy ejecutando está en/public_html.

$ usuario no devuelve el usuario conectado. Me he asegurado de que no se trate de un problema entre dominios (es decir, www.domain.com vs. domain.com).

chdir('/path/to/drupal'); 

include_once('./includes/bootstrap.inc'); 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 
global $user; 

if ($user->uid) { 
    print "Logged in"; 
} else { 
    print "Logged out"; 
} 
+0

Creo que puedes hacer una drupal_bootstrap (BOOTSTRAP_SESSION). Debería ser mucho más rápido. – gagarine

Respuesta

6

Si la u. ser no es reconocido por Drupal en su script separado, hay muchas posibilidades de que no reciba la cookie de sesión adecuada. Debería verificar las cookies establecidas por su instalación normal de Drupal y ver si también se envían a su script. De lo contrario, verifique la variable $cookie_domain en la configuración de Drupals.php; usualmente está comentada, pero es posible que deba establecerla explícitamente en su caso.

+0

Gracias! Establezca $ cookie_domain a "mydomain.com" y funcionó como un encanto! –

+0

Gracias. ¡Nunca hubiera encontrado esto!Mi script está en el mismo dominio, entonces ¿por qué cookie_domain debe establecerse incorrectamente? Es un misterio. Se estaba configurando como ".example.org" (fíjate en el encabezado), y debía corregirse en esto para que mis otros scripts funcionen. – artfulrobot

2

Drupal utiliza una gran cantidad de magia pesada de averiguar qué entorno de uso: en parte porque puede haber múltiples sitios en la misma instalación de Drupal.

Una cosa que se está perdiendo es $base_url. Esto debe establecerse en la URL al sitio de Drupal que desea establecer como boostrap (por ejemplo, $base_url = "http://example.com").

La otra cosa con la que te vas a encontrar, pero parece que ya la has solucionado, es que tu script y Drupal necesitan tener el mismo FQDN. Poner el script en http://foo.example.com y tener Drupal live en http://example.com no funcionará. Por lo tanto, a menos que Drupal viva en http://example.com/drupal y su secuencia de comandos viva en http://example.com, su script siempre devolverá el objeto de usuario anónimo.


Editar

Usted podía tener la secuencia de comandos en un FQDN que no es el mismo que el de Drupal (como, por ejemplo, tener un sitio Drupal en http://drupal.example.com que apunta a /var/www/drupal y que tiene la secuencia de comandos en http://external.example.com/test.php que apunta a /var/www/test.php; pero, en este caso, que había necesidad de haber iniciado sesión en http://external.example.com/drupal en lugar de http://drupal.example.com

+0

Lo necesita antes de incluir el bootstrap.inc. Drupal lo usa durante el arranque para determinar su entorno. –

+0

Hmm: la variable '$ base_url' debe definirse en su archivo settings.php, que se lee mediante la lógica de arranque, por lo que no debería ser necesario definirlo/anularlo en el script. –

+0

$ base_url tiene que definirse explícitamente en settings.php; de lo contrario, Drupal adivina en base a $ _SERVER ['HTTP_HOST'], que no se configurará correctamente para un script fuera del directorio de Drupal. Establecerlo en el script permite que la instalación de Drupal permanezca intacta. Esto es especialmente útil cuando tiene un sitio, http://example.com, en/var/www/drupal, y su script es http://foo.com/script.php que apunta a/var/www/script .php. –

Cuestiones relacionadas