He resuelto este problema a mí mismo por tener un formulario de acceso en la cabecera que se somete siempre a un controlador de acceso, pero la captura es que la forma de la conexión de cabecera (que aparece en cada página) siempre tiene un campo oculto llamado redirección que captura el controlador de acceso real ...
Aquí está la configuración básica (asegúrese de que el asistente de url se carga):
La cabecera Formulario de acceso Formulario
<form action="/login" method="post">
<input type="hidden" name="redirect" value="<?php echo current_url(); ?>" />
<input type="text" name="username" value="" />
<input type="password" name="password" value="" />
<input type="submit" name="login" value="Login" id="submit">
</form>
El controlador de sesión
<form id="login" action="" method="post">
<input type="text" name="username" id="username" value="" />
<input type="password" name="password" id="password" value=""/>
<?php if(isset($_POST['redirect'])) : ?>
<input type="hidden" name="redirect" value="<?php echo $_POST['redirect']; ?>" />
<?php endif; ?>
<input type="submit" name="login" id="submit" value="Login" />
</form>
la mejor parte es que conserva el ajuste de la redirección en caso de fallo y la entrada de redirección sólo se pone establecer si' vuelve a iniciar sesión desde otro lugar.
El controlador
function index()
{
if(! $this->form_validation->run())
{
// do your error handling thing
}
else
{
// log the user in, then redirect accordingly
$this->_redirect();
}
}
function _redirect()
{
// Is there a redirect to handle?
if(! isset($_POST['redirect']))
{
redirect("site/members_area", "location");
return;
}
// Basic check to make sure we aren't redirecting to the login page
// current_url would be your login controller
if($_POST['redirect'] === current_url())
{
redirect("site/members_area", "location");
return;
}
redirect($_POST['redirect'], "location");
}
¿Qué está pasando aquí es la siguiente:
- inicios de sesión de usuario en una página diferente.
- El formulario de inicio de sesión se envía a un único controlador de inicio de sesión con un elemento de entrada oculto que indica desde dónde están iniciando sesión.
- El controlador de inicio de sesión procesa el inicio de sesión, luego redirige en función de la entrada.
- En el inicio de sesión fallido, la redirección sigue configurándose nuevamente, por lo que pase lo que pase, el usuario volverá a la página original.
Eso es solo un ejemplo básico. Obviamente puedes modificarlo según sea necesario.
"al tener un formulario de inicio de sesión en el encabezado" .. Lo siento pero estoy perdido allí. A qué te refieres ? –