Ваша функция говорит: «Если пользователь не войдите в систему, покажите сообщение об ошибке и запишите ошибку, в противном случае зарегистрируйте пользователя с помощью 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 */
При посещении приветственного/индекса он устанавливает данные сессии. Когда вы нажимаете ссылку на checkess, checkess echo - это userdata, то вызывает sess_destroy. Теперь, если вы обновляете контрольные суммы, userdata НЕ установлен (из-за sess_destroy), и вы видите сообщение об ошибке «User do logout without logged ...»
В коде не содержится ничего, чтобы объяснить поведение, которое вы испытываете ,
Я обнаружил неожиданное поведение при попытке использовать библиотеку сеансов CI для онлайн-чата. Я, наконец, переключился на использование собственных PHP-сессий. Я подозреваю, что вы нашли такую ошибку. Хороший улов; это может дать некоторую полезную информацию. –