Well it\'s not really a problem but I check if the user exist and log them in and redirect to site/members_area, but I don\'t want to send the user to a specific page but i want
I'm sure there may be a better way, but the way I do it is when the check if the user is logged in fails I use $this->session->set_flashdata('redirect_url', current_url());
and then pass it along with the login form so I know where to redirect the user back to.
Like I say, I'm sure there's a cleaner way to do this but I definitely don't like $_SERVER['HTTP_REFERER'];
as it can't really be trusted.
I solved this problem myself by having a login form in the header that always submits to one login controller, but the catch is that the header login form (which appears on every page) always has a hidden input called redirect which the actual login controller captures...
Here's the basic set up (make sure the url helper is loaded):
The Header Login Form
<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>
The Login Controller Form
<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>
The best part is you keep setting the redirect on failure and the redirect input only gets set if you're logging in from somewhere else.
The Controller
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");
}
What's happening here is this:
That's just a basic example. You can obviously tweak it as needed.
You can do it like this. Remember to load the session library and url helper.
$this->session->set_flashdata('redirectToCurrent', current_url());
Pass the above flashdata along with the login and redirect using:
redirect($this->session->flashdata('redirectToCurrent'));