Некоторые замечания по безопасности:
if($matchingUser['inactive'] == 1)
лучше записать как
if(!$matchingUser['inactive'])
Потому что, если схема базы данных изменится (например, теперь это целое число для обозначения определенного типа действия (что, на мой взгляд, плохой дизайн: перечисление будет лучше)), ваш код будет иметь проблемы.
Конечно, это двойной негатив, который может быть менее читабельным. Лучше было бы:
if($matchingUser['isactive'])
Или даже:
if($matchingUser->isActive())
при условии, что вы создаете класс User и т. Д. И т. Д.
На всякий случай используйте или require
или require_once
, где это необходимо (желательно последнее, если connect.php
содержит объявления функций).
Сохранить идентификатор пользователя в переменной сеанса вместо имени пользователя. Существует возможность, что вы позволите пользователю изменить свое имя позже, и данные сеанса будут недействительными (по крайней мере, ['user']
будет, в любом случае). Также быстрее найти запись в базе данных по идентификатору (первичный ключ, уникальный), чем по имени пользователя (может быть, индексировано, строка).
Пинать меня через 30 минут действительно раздражает. Вы не единственный сайт, на который я захожу, и я могу вернуться к нему позже, выполнив некоторую работу (например, если мне позвонят, чтобы что-то сделать, или взять обеденный перерыв).
Используйте htmlspecialchars
, чтобы предотвратить XSS.
Не нужно использовать $_SERVER['PHP_SELF']
здесь:
<a href="' . $_SERVER["PHP_SELF"] . '?logout=true">
Просто напишите без него:
<a href="?logout=true">
Когда пользователь что-то публикует, обязательно перенаправьте его (TODO: обратите внимание, как). В противном случае кнопка «Назад» пользователя может привести к повторной отправке данных (что, вероятно, не то, что вам нужно!).