Я создал регистрацию и вход на свой веб-сайт, и вся проверка работает нормально как для регистрации, так и для входа в систему. После того, как пользователь предоставит действительные учетные данные, он / она входит в личный кабинет с приветственным сообщением, в котором говорится: «Привет first_name last_name» ... в основном имя и фамилия берутся из базы данных.
В любом случае, я хочу ограничить членский кабинет только авторизованным пользователям. Все остальные будут перенаправлены на домашнюю страницу или страницу входа в систему, или куда я решу, они должны быть перенаправлены.
Я использовал ci_sessions, которые хранятся в таблице «ci_sessions» в моей базе данных. Session_id, ip_address, user_agent, last_activity и user_data - это столбцы. Так что я предполагаю, что это некоторая форма безопасности, а не хранение файлов cookie только в браузере пользователей. Это еще не все.
В любом случае, прямо сейчас, чтобы запретить кому-либо, кроме зарегистрированных пользователей, получить доступ к моему личному кабинету на сайте, например, http: //example.com/member_area Я использую простой оператор if в моем контроллере для области участника:
if (! $this->session->userdata('first_name'))
{
redirect('login');
}
Это проверяет, есть ли у человека, который пытается получить доступ к странице членской зоны, какие-то данные, хранящиеся в user_data в моей таблице ci_sessions, такие как first_name, и если да, то позволяет ему получить доступ к странице, что означает, что он должен был войти в систему и все еще имеют активный сеанс.
Если в базе данных ничего не найдено, они перенаправляются на страницу входа в систему. Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?
Ниже мой код модели:
load->library('session');
if (!$user_id = $CI->session->userdata('user_id')) {
return FALSE;
}
if (!$u = Doctrine::getTable('User')->find($user_id)) {
return FALSE;
}
self::$user = $u;
}
return self::$user;
}
public static function login($email, $password) {
// get User object by email
if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {
// to ge the mutated version of the input password
$u_input = new User();
$u_input->password = $password;
// password match
if ($u->password == $u_input->password) {
$CI =& get_instance();
$CI->load->library('session');
$CI->session->set_userdata('user_id',$u->id);
$CI->session->set_userdata('username',$u->username);
$CI->session->set_userdata('first_name',$u->first_name);
$CI->session->set_userdata('last_name',$u->last_name);
self::$user = $u;
return TRUE;
}
unset($u_input);
}
// login failed
return FALSE;
}
public function __clone() {
trigger_error('No duplicates allowed.', E_USER_ERROR);
}
}
Все ваши советы приветствуются.
ОБНОВЛЕНИЕ
Как насчет добавления этого в мою модель
$CI->session->set_userdata('logged_in', 'TRUE');
Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?
Ниже мой код модели:
load->library('session');
if (!$user_id = $CI->session->userdata('user_id')) {
return FALSE;
}
if (!$u = Doctrine::getTable('User')->find($user_id)) {
return FALSE;
}
self::$user = $u;
}
return self::$user;
}
public static function login($email, $password) {
// get User object by email
if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {
// to ge the mutated version of the input password
$u_input = new User();
$u_input->password = $password;
// password match
if ($u->password == $u_input->password) {
$CI =& get_instance();
$CI->load->library('session');
$CI->session->set_userdata('user_id',$u->id);
$CI->session->set_userdata('username',$u->username);
$CI->session->set_userdata('first_name',$u->first_name);
$CI->session->set_userdata('last_name',$u->last_name);
self::$user = $u;
return TRUE;
}
unset($u_input);
}
// login failed
return FALSE;
}
public function __clone() {
trigger_error('No duplicates allowed.', E_USER_ERROR);
}
}
Все ваши советы приветствуются.
ОБНОВЛЕНИЕ
Как насчет добавления этого в мою модель
$CI->session->set_userdata('logged_in', 'TRUE');
Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?
Ниже мой код модели:
load->library('session');
if (!$user_id = $CI->session->userdata('user_id')) {
return FALSE;
}
if (!$u = Doctrine::getTable('User')->find($user_id)) {
return FALSE;
}
self::$user = $u;
}
return self::$user;
}
public static function login($email, $password) {
// get User object by email
if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {
// to ge the mutated version of the input password
$u_input = new User();
$u_input->password = $password;
// password match
if ($u->password == $u_input->password) {
$CI =& get_instance();
$CI->load->library('session');
$CI->session->set_userdata('user_id',$u->id);
$CI->session->set_userdata('username',$u->username);
$CI->session->set_userdata('first_name',$u->first_name);
$CI->session->set_userdata('last_name',$u->last_name);
self::$user = $u;
return TRUE;
}
unset($u_input);
}
// login failed
return FALSE;
}
public function __clone() {
trigger_error('No duplicates allowed.', E_USER_ERROR);
}
}
Все ваши советы приветствуются.
ОБНОВЛЕНИЕ
Как насчет добавления этого в мою модель
$CI->session->set_userdata('logged_in', 'TRUE');
Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". в моем контроллере для моей «членской зоны» я отредактировал оператор if, чтобы сказать следующее:
if (! $this->session->userdata('logged_in')==TRUE)
{
redirect('login');
}
Если элемент не существует, «чего не будет, если пользователь не вошел в систему», то FALSE будет возвращено, и пользователь будет перенаправлен на страницу входа в систему
Как вы думаете?
или я мог бы даже сделать ИСТИННЫМ что-то секретное, например, dsb453rerfksdhbdsks322. Что-то случайное.