Tuve que agregar una instalación de WordPress a mi sistema CodeIgniter, así que lo puse en un submapa llamado blog
y excepto esa carpeta en mi .htaccess
. Todo bien y bien.
He puesto todas las tablas de WordPress juntas en mis bases de datos de CodeIgniter con prefijo _wp
.
Ahora he cargado el archivo de encabezado del blog de WordPress en el index.php
de CodeIgniter, así;
require('blog/wp-blog-header.php');
add_filter('site_url', 'ci_site_url', 1);
function ci_site_url() {
include(FCPATH.'/application/config/config.php');
return $config['base_url'];
}
E hice un método de registro en mi Account
controlador para hacer un enlace real a mi Customers
. Hago esto porque quiero hacer obsoleto el inicio de sesión/registro de WordPress y controlarlo únicamente desde la página de inicio de sesión de CodeIgniter;
protected function register_wp($email_address = FALSE) {
if ($email_address !== FALSE) {
if (username_exists( $email_address ) == NULL) {
$password = wp_generate_password(12, TRUE);
$user_id = wp_create_user($email_address, $password, $email_address);
wp_update_user(array(
'ID' => $user_id,
'nickname' => $email_address
));
$user = new WP_User($user_id);
$user->set_role('subscriber');
$login_data = array(
'user_id' => $user_id,
'password' => $password,
);
return $login_data;
}
else {
// User already exists with that email address
return FALSE;
}
}
else {
// No email_address given
return FALSE;
}
}
Y el método de inicio de sesión, para dar una idea;
protected function login_wp($user_id = FALSE) {
if ($user_id !== FALSE) {
$user_login = 'admin';
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action('wp_login', $user_login);
}
else {
// No user_id given
return FALSE;
}
}
Todo sigue yendo bien. Pero aquí viene el choque; algo que me entristeció mucho porque todo funcionó muy bien hasta ahora:
WordPress supera la sesión y mata la sesión de CodeIgniter.
Ya probé toneladas de cosas;
session_rename('PHPSESSIDWP');
y luego iniciar otra sesión (con otro nombre) para CodeIgniter después de cargar WordPress- Ruta de COOKIES (no estoy 100% seguro de haber hecho esto bien, ya que no cambió en absoluto. Lea algunas cosas en línea, tampoco funciona bien en todos los navegadores)
- dominio COOKIE (parecía no tener efecto)
El problema es que no puedo cargar el require('blog/wp-blog-header.php');
solo en el método del controlador, ya que necesito poder controlar el estado de inicio de sesión de la parte de WordPress. Además de eso recibiré quejas sobre el site_url()
función, que ya ha reclamado el ayudante de URL.
Creo que el problema se debe principalmente a que tanto CodeIgniter como WordPress usan su propia forma única de manejar las sesiones (CI en la base de datos y WordPress en “superglobales”), lo que probablemente solo les hace usar la cookie para recordar un “estado”.
Todo mi sistema CodeIgniter ya se ejecuta en los modelos de sesión controlados por base de datos, por lo que es absolutamente imposible hacer un cambio. Para WordPress, parece que ya ni siquiera puede funcionar con la sesión con sus características de código (sé que la sesión “hace” trabajo, pero eso no parece contar de ninguna manera para el sistema central de WP).
También cité wp_unregister_GLOBALS();
en el wp-settings.php
expediente.
Además, también traté de cambiar el nombre de mi sesión COOKIE en CodeIgniter para usar algo como session_ci
Realmente espero que alguien sepa una manera de poder decirle a CodeIgniter o WordPress que solo actualicen sus valores y no eliminen toda la sesión cada vez. También leí algo sobre dividir las cookies con .htaccess
pero no puedo encontrar buenos recursos en él. Así que si alguien sabe cómo hacerlo, le estaría eternamente agradecido.
estoy desesperado Terminarlo en un 98% y luego obtener una gran decepción al final :(..
Actualizar
¿Tal vez pueda hacer algo en la sección de WordPress que maneja las cookies?
http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie
Lamentablemente, no estoy realmente en casa en el mundo de WordPress. Solo tengo que usarlo esta vez debido a la plantilla comprada que la gente realmente quería usar en el blog.
También este página establece lo siguiente;
WordPress usa las dos cookies para omitir la parte de ingreso de contraseña de wp-login.php. Si WordPress reconoce que tiene cookies válidas y vigentes, vaya directamente a la interfaz de administración de WordPress. Si no tiene las cookies, o si han caducado, o de alguna otra manera inválida (como si los editara manualmente por alguna razón), WordPress le pedirá que inicie sesión nuevamente para obtener nuevas cookies.
Sin embargo, me pregunto cómo omitir esa verificación “no válida”, que probablemente sea la razón por la que elimina las cookies de CodeIgniter. Por extraño que parezca, parece que el session_ci
el valor permanece, aunque la sesión todavía parece estar muerta.
Ben Racicot
Debe iniciar su sesión en la parte superior de config.php. Este es el único lugar donde WordPress no destruirá una sesión.
if (!session_id())
session_start();
Si su instalación de PHP no tiene habilitado register_global, el código anterior debería permitirle usar la sesión; sin embargo, si lo hace, no podrá obtener los datos que se establecieron en la solicitud anterior. Esto se debe a que WordPress destruirá todos los datos contenidos dentro de la variable de sesión cuando realice la inicialización.
Aquí está el por qué y la solución de problemas en esto -> kanasolution.com
RESPUESTAS AMPLIADAS:
Fuente: http://codex.wordpress.org/WordPress_Cookies
Al iniciar sesión, wordpress usa wordpress_[hash] cookie para almacenar sus datos de autenticación. Su uso está limitado al área de la consola de administración, /wp-admin/
Después de iniciar sesión, wordpress establece wordpress_logged_in_[hash] cookie, que indica cuándo ha iniciado sesión y quién es usted, para la mayoría de los usos de la interfaz.
Entonces, a WordPress claramente no le gusta la forma en que está escribiendo cookies, ¿tal vez su falta de hash MD5 de 8 pases, etc.? Métodos de cifrado de WordPress
El entorno de WordPress
Lo siguiente que intentaría es integrar su página de inicio de sesión personalizada en el entorno de WordPress en lugar de solo solicitar el encabezado. (vamos a alejarnos de editar el núcleo)
De WordPress & AJAX por Ronald Huereca página 78 explica cómo cargar manualmente el entorno de WordPress.
El uso de las funciones de dirname depende de la jerarquía de su archivo. Ajústelos según sea necesario. El código debe usarse antes de la etiqueta de su archivo.
$root = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
if (file_exists($root.'/wp-load.php')) {
require_once($root.'/wp-load.php');
/*Run custom WordPress stuff here */
//Output header HTML, queue scripts and styles, and include BODY content
wp_enqueue_script('my_script', get_stylesheet_directory_uri() . '/my_script.js', array('jquery'), '1.0.0');
wp_print_scripts(array('my_script'));
}
-
Lamentablemente, el problema ya no es la sesión en el punto en que está mi situación. Se trata de que WordPress destruya la cookie, ya que parece pensar que es inseguro. manteniendo un
$_SESSION
intacto no es un problema en este momento. Sin embargo, ambos sistemas no utilizan sesiones nativas.– usuario1467267
21 de agosto de 2013 a las 16:41
¿Estás probando esto localmente? En caso afirmativo, envíeme la carpeta de su proyecto comprimida (puede obtener mi correo electrónico del perfil). Jugaré un poco y veré si puedo ayudarte con esto. Sigue estos, planetozh.com/blog/2009/08/… (Preferido) lud.icro.us/wordpress-http-api-basicauth net.tutsplus.com/tutorials/php/… wordpress.stackexchange.com/questions/58906/… bitbucket.org/osferanet/ciwp-auth/wiki/Inicio Espero que esto ayude, de lo contrario, contáctame.
– Syed
20 de agosto de 2013 a las 14:56
Pruebe este enfoque si es posible, Administrador de sesión
– Syed
22 de agosto de 2013 a las 6:57
¿Encontraste algo que funcione?
– laviku
3 de octubre de 2014 a las 5:13
Tuve que redondear esto el año pasado para un cliente. Al final, solo puse WordPress en una subcarpeta (enrutamiento .htaccess) junto a mi instalación de CodeIgniter y los vinculé a través de una clave secreta con cifrado bidireccional y agregué un archivo en WordPress que enganchó algunas funciones básicas de WordPress, así que podría vincular las llamadas de registro, inicio de sesión y ajuste directamente desde mi CodeIgniter CMS. Así que los separé por completo y simplemente agregué un campo adicional en mi CodeIgniter CMS que indicaba qué WordPress User_ID había vinculado ese usuario de CMS. No es bonito, pero era seguro y funcionaba a las mil maravillas. Espero que esto ayude 🙂
– usuario1467267
3 de octubre de 2014 a las 7:04