Подскажите с функцией

Jon_De

Новичок
Здравствуйте. В общем суть такая. Делаю небольшой сайт с маленьким функционалом, буквально несколько страниц.
Делаю авторизацию пользователей без кук, только на сессиях
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;
	}
если ид = 0, то пользователь не авторизован

в файле конфига хранятся массивы с данными для подключения к базе, в зависимости от выбранного пользователем сервера

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 добавлял, потому что не особо регулярки знаю, так сделал как знал :), а то мало ли с пустой строкой перекинет
 

md5S

Это вам не это.
Jon_De в сессии лучше всего хранить id пользователя, имя пользователя и максимум тип его профиля, но при необходимости лучше делать лишний раз проверку на существование, при изменении этих данных - стоит предоставить пользователю возможность авторизоваться повторно.

PHP:
if(strlen($login) < 1 or strlen($login) > 25 or strlen($password) < 1 or strlen($password) > 25) die('Ошибка get_info 3');
зачем проверять дважды? одного раза вполне было достаточно

инъекций нет так как ты все это обернул в mysql_real_escape_string();

По оптимизации:
* стоит сделать отдельный класс работы с БД.
* не стоит делать die(), посмотри в сторону исключение http://php.net/manual/ru/language.exceptions.php
 
Сверху