Ваша функция говорит: «Если пользователь не вошел в систему, покажите сообщение об ошибке и зарегистрируйте ошибку, в противном случае выйдите из системы с помощью sess_destroy ()» *
Так что, если вы посещаете страницу и выне залогинен, вы видите ошибку.Если вы зашли на страницу и ВЫ вошли в систему, функция вызывает sess_destroy и выходит из системы.
Пояснение: Ваш код допускает только 1 пользовательское состояние: выход из системы - это единственный способ, с помощью которого на странице будет любой вывод.Если кто-то, вошедший в систему, заходит на страницу, он немедленно выходит из системы.
if($this->session->userdata('email')){
//the user is logged in
echo "HELLO USER, YOU ARE LOGGED IN!";
}else{
//you don't need session_destroy because
//they won't get here with a session to be destroyed
redirect('/home');
}
Дополнительные пояснения: я проверил это на новой установке Codeigniter, и он ведет себя, как я объяснил.
Изменение стандартного контроллера приветствия для экономии времени:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->library('session');
}
function index()
{
$this->session->set_userdata("user","1234");
echo "userdata set to: ".$this->session->userdata("user"). "<br>";
echo "<a href='welcome/checksess'>check session</a>";
}
function checksess()
{
if ( !$this->session->userdata("user"))
{
$error = "User do logout without been logged [" . $_SERVER['REMOTE_ADDR'] ."]" ;
log_message('error', $error);
show_error($error);
}
else
{
echo "userdata: ".$this->session->userdata("user"). " about to be destroyed with sess_destroy<br>";
$this->session->sess_destroy();
echo "<a href='checksess'>check session again after sess_destroy (refresh this page)</a>";
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
При посещении приветствия / индекса он устанавливает данные сеанса.Когда вы нажимаете на ссылку для проверки, checksess echo отображает userdata, затем вызывает sess_destroy.Теперь, если вы обновляете checksess, userdata НЕ устанавливается (из-за sess_destroy), и вы видите ошибку «Пользователь выходит из системы без регистрации ...»
В предоставленном вами коде нет ничего, чтобы объяснить поведение, которое вы выполняетепереживают.