Jon_De
Новичок
Здравствуйте. В общем суть такая. Делаю небольшой сайт с маленьким функционалом, буквально несколько страниц.
Делаю авторизацию пользователей без кук, только на сессиях
1 вопрос: Лучше записывать все данные в сессию (админка, ник, и тд) или допустимо, что при переходе по страницам я данные буду каждый раз вытаскивать из базы? (около 100к записей в базе) При том что данные пользователя могут обновиться, пока он находится на сайте
2 вопрос: Сделал функцию для получения всех данных пользователя по его логину, паролю и серверу, к которому он подключается
если ид = 0, то пользователь не авторизован
в файле конфига хранятся массивы с данными для подключения к базе, в зависимости от выбранного пользователем сервера
Как можно было бы улучшить ф-ю и нормально ли фильтруются входящие данные, есть угроза иньекции на этом участке кода?
strlen добавлял, потому что не особо регулярки знаю, так сделал как знал
, а то мало ли с пустой строкой перекинет
Делаю авторизацию пользователей без кук, только на сессиях
1 вопрос: Лучше записывать все данные в сессию (админка, ник, и тд) или допустимо, что при переходе по страницам я данные буду каждый раз вытаскивать из базы? (около 100к записей в базе) При том что данные пользователя могут обновиться, пока он находится на сайте
2 вопрос: Сделал функцию для получения всех данных пользователя по его логину, паролю и серверу, к которому он подключается
PHP:
function get_info()
{
global $server_host;
global $server_user;
global $server_db;
global $server_password;
$playerinfo = array("id" => 0);
if(!isset($_SESSION['user_password'])) return $playerinfo; /* Если какая либо из переменных не установлена - не авторизован */
if(!isset($_SESSION['user_name'])) return $playerinfo;
if(!isset($_SESSION['server_id'])) return $playerinfo;
$login = $_SESSION['user_name'];
$password = $_SESSION['user_password'];
$server_id = intval($_SESSION['server_id']);
if(!preg_match("/^[_a-zA-Z0-9]{3,25}+$/", $login)) return $playerinfo; /* Проверка данных */
if(!preg_match("/^[_a-zA-Z0-9]{3,25}+$/", $password)) return $playerinfo;
if(strlen($login) < 3 or strlen($login) > 25) return $playerinfo; /* Проверка данных */
if(strlen($password) < 3 or strlen($password) > 25) return $playerinfo;
if($server_id < 1 or $server_id > count($server_host)) return $playerinfo;
$connect = mysql_connect($server_host[$server_id], $server_user[$server_id], $server_password[$server_id]) or die('Ошибка get_info 1');
mysql_select_db($server_db[$server_id]) or die('Ошибка get_info 2');
$login = mysql_real_escape_string($login);
$password = mysql_real_escape_string($password);
if(strlen($login) < 1 or strlen($login) > 25 or strlen($password) < 1 or strlen($password) > 25) die('Ошибка get_info 3');
$result = mysql_query("SELECT * FROM `users` WHERE `Name` = '$login' AND `Password` = md5('$password') LIMIT 1") or die('Ошибка get_info 4');
$playerinfo = mysql_fetch_assoc($result);
mysql_close($connect);
return $playerinfo;
}
в файле конфига хранятся массивы с данными для подключения к базе, в зависимости от выбранного пользователем сервера
PHP:
$server_host = array("0", "127.0.0.1", "127.0.0.1");
$server_user = array("0", "sss", "ssss");
$server_db = array("0", "sss", "ssss");
$server_password = array("0", "12345", "12345");
strlen добавлял, потому что не особо регулярки знаю, так сделал как знал
