我在Codeigniter 3中创建了一个注册和登录应用程序。我一直在努力解决这个问题:登录后,用户被重定向到主页,但单击浏览器的back按钮会触发signout()函数,而不是从Signin页面重定向到主页。
签名控制器有以下代码:
class Signin extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->view('signin');
}
public function signin()
{
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run())
{
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->load->model('Usermodel');
$current_user = $this->Usermodel->user_login($email, $password);
// Unset the current user's data
if ($current_user) {
$this->session->set_userdata(
array(
'user_id' => $current_user->id,
'user_email' => $current_user->email,
'user_first_name' => $current_user->fname,
'is_logged_in' => TRUE
)
);
redirect('home');
} else {
$this->session->set_flashdata("signin_failure", "Incorrect email or password");
redirect('signin');
}
}
else
{
$this->load->view('signin');
}
}
public function signout(){
// Unset the current user's data
$this->session->unset_userdata('user_id');
$this->session->unset_userdata('user_email');
$this->session->unset_userdata('user_first_name');
$this->session->unset_userdata('is_logged_in');
// Load the signin view
$this->load->view('signin');
}
}在导航栏(header.php视图)中,我在需要时使用is_logged_in显示Sigin、Register按钮:
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<?php if($this->session->userdata('is_logged_in')) : ?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><span class="glyphicon glyphicon-user"></span> Welcome, <?php echo $this->session->userdata('user_first_name'); ?>
<span class="caret"></span></a>
</a>
<ul class="dropdown-menu">
<li><a href="#"><span class="glyphicon glyphicon-phone"></span> My contacts</a></li>
<li><a href="#"><span class="glyphicon glyphicon-phone-alt"></span> All contacts</a></li>
<li><a href="<?php echo base_url('index.php/Signin/signout'); ?>" title="Signout"><span class="glyphicon glyphicon-log-out"></span> Signout</a></li>
</ul>
</li>
<?php else: ?>
<li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Signin</a></li>
<li><a href="#"><span class="glyphicon glyphicon-user"></span> Register</a></li>
<?php endif;?>
</ul>
</div>在使用了一次Signout按钮之后,用户再次登录,单击浏览器的back按钮将加载http://localhost/ciauth/index.php/Signin/signout并触发signout()函数。
我做错了什么?谢谢!
发布于 2017-10-13 19:54:42
您需要在index & signin方法的顶部添加下面提到的行。
if ($this->session->userdata('is_logged_in')==TRUE)
redirect('home');发布于 2017-10-13 21:22:27
问题发生在这里:
$current_user = $this->Usermodel->user_login($email, $password);
if($current_user)
{
#is always !$current_user because $email and $password is empty. you should build condition with userdata first. if userdata not false or whatever condition comparing..and then, how you you pass output(return) in model $this->Usermodel->user_login($email, $password)??
}
else
{
#so it going here.
redirect('signin');
}用新的建议更新。
public function signin() {
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run()) { // that's mean user come here after submit form..
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->load->model('Usermodel');
$current_user = $this->Usermodel->user_login($email, $password);
if ($current_user) { #maksure you function user_login() in Usermodel will not return FALSE if success login with $email and #password (must return something or TRUE). Then MUST return FALSE if failed to login.
// re-set back the current user's data
$this->session->set_userdata(
array(
'user_id' => $current_user->id,
'user_email' => $current_user->email,
'user_first_name' => $current_user->fname,
'is_logged_in' => TRUE
)
);
redirect('home');
} else {
$this->session->set_flashdata("signin_failure", "Incorrect email or password");
redirect('signin');
}
} else { // user come here not after submit login form. possible click browsers button..
$user_id = $this->session->userdata('is_logged_in');
if($user_id){ // if return TRUE user already login..
print_r('hello ' . $this->session->userdata('user_first_name') . ', youre already login.. do something below');
#do something..
} else {
#you need to sign in with this form because you're not login.
$this->load->view('signin');
}
}
} // end of function..https://stackoverflow.com/questions/46736865
复制相似问题