Изменено поле в БД, вынесены лишние функции их functions в профильные файлы. Оказывается, давно не работал логин и плохо работали сессии. Проверяется. Прочие мелкие баги и чистка самых хвостов.
This commit is contained in:
@@ -19,7 +19,7 @@ $battle = $_COOKIE['battle'] ?? '';
|
||||
$error = "";
|
||||
|
||||
if ($username && $password) {
|
||||
$user_query = DBPDO::$db->ofetch('SELECT id, login, pass, room, block FROM users WHERE login = ?', $username);
|
||||
$user_query = DBPDO::$db->ofetch('SELECT id, login, pass, room, block, session_id FROM users WHERE login = ?', $username);
|
||||
|
||||
if (!$user_query->id) {
|
||||
$error = ERROR_NO_SUCH_USER;
|
||||
@@ -27,28 +27,34 @@ if ($username && $password) {
|
||||
$error = ERROR_USER_IS_BLOCKED;
|
||||
} elseif (password_verify($password, $user_query->pass)) {
|
||||
|
||||
if (!$error) {
|
||||
# Проверка на мультоводство по используемому кукису.
|
||||
if ($battle != null && $user_query->id != $battle) {
|
||||
GameLogs::addUserLog($user_query->id,'Разные ID на входе. Возможно используются несколько аккаунтов.', 'multiaccounts');
|
||||
}
|
||||
|
||||
setcookie("battle", $user_query->id);
|
||||
$_SESSION['uid'] = $user_query->id;
|
||||
setcookie("uid", $user_query->id, time() + 43200, "/", GAMEDOMAIN);
|
||||
setcookie("hashcode", md5($user_query->id . $user_query->pass . $username), time() + 43200, "/", GAMEDOMAIN);
|
||||
$_SESSION['sid'] = session_id();
|
||||
|
||||
$onl = DBPDO::$db->ofetch('SELECT user_id FROM online WHERE user_id = ?', $user_query->id);
|
||||
if (isset($onl->user_id)) {
|
||||
DBPDO::$db->execute('UPDATE online SET date = ? WHERE user_id = ?', [time(), $user_query->id]);
|
||||
} else {
|
||||
DBPDO::$db->execute('INSERT INTO online (user_id, date, room, real_time) VALUES (?,?,?,?)', [$user_query->id, time(), $user_query->room, time()]);
|
||||
}
|
||||
|
||||
DBPDO::$db->execute('UPDATE users SET session_id = ?, enter_game = 1 WHERE id = ?', [session_id(), $user_query->id]);
|
||||
header("Location: fight.php");
|
||||
# Проверка на мультоводство по используемому кукису.
|
||||
if ($battle != null && $user_query->id != $battle) {
|
||||
GameLogs::addUserLog($user_query->id,'Разные ID на входе. Возможно используются несколько аккаунтов.', 'multiaccounts');
|
||||
}
|
||||
|
||||
# TEST! Влетаем всегда в одну и ту же сессию.
|
||||
if ($user_query->session_id) {
|
||||
session_id($user_query->session_id);
|
||||
}
|
||||
|
||||
$_SESSION['uid'] = $user_query->id;
|
||||
|
||||
setcookie("battle", $user_query->id);
|
||||
setcookie("uid", $user_query->id, time() + 43200, "/", GAMEDOMAIN);
|
||||
setcookie("hashcode", md5($user_query->id . $user_query->pass . $username), time() + 43200, "/", GAMEDOMAIN);
|
||||
|
||||
$onl = DBPDO::$db->ofetch('SELECT 1 FROM online WHERE user_id = ?', $user_query->id);
|
||||
if ($onl) {
|
||||
DBPDO::$db->execute('UPDATE online SET login_time = ? WHERE user_id = ?', [time(), $user_query->id]);
|
||||
} else {
|
||||
DBPDO::$db->execute('INSERT INTO online (user_id, login_time, room, real_time) VALUES (?,?,?,?)', [$user_query->id, time(), $user_query->room, time()]);
|
||||
}
|
||||
|
||||
DBPDO::$db->execute('UPDATE users SET session_id = ?, enter_game = 1 WHERE id = ?', [session_id(), $user_query->id]);
|
||||
|
||||
session_start();
|
||||
|
||||
header("Location: fight.php");
|
||||
} else {
|
||||
$error = ERROR_WRONG_PASSWORD;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user