(я - специалист по MSSQL, поэтому не знаю, относятся ли какие-либо из этих пунктов к MySQL)
Это на самом деле не связано с безопасностью, просто общие замечания на случай, если это будет полезно:
Не используйте SELECT * - выведите список нужных вам столбцов - похоже, вам нужен только a_id & last_login. Вы можете добавить Blob в эту таблицу с их фотографией в будущем или с личными заметками и т. Д. - это убьет производительность во всех местах, где вы использовали SELECT * в прошлом, и вам не нужна картинка.
Я бы не стал использовать LIMIT 1 - я бы очень хотел узнать, есть ли в данный момент DUP, и вызвать ошибку.
Я бы поместил столбец last_login в другую таблицу, связанную 1: 1 с вашей таблицей User / password. Это элемент частых изменений, и если вы решите ввести таблицу Audit в таблицу user / Password (т. Е. Сохранять старые значения всякий раз, когда она изменяется), имея часто меняющийся столбец «info», это немного портит.
Лично я хотел бы, чтобы соглашение об именах столбцов и переменная SESSION / одно и то же.
admin_id / a_id, LastLogin / last_login
Лично я не буду хранить пароль в сеансе, если он вам не понадобится позже. Я бы сохранил что-то, чтобы указать «разрешения», которые есть у пользователя, и затем использовал бы это, чтобы решить, могут ли они просматривать PageX или PageY и т. Д.