а что использовать вместо id, если мне нужно применить теги к одному блоку?задать ему уникальный класс? добавить уникальный аттрибут? хмм....
$stmt = $conn->prepare('SELECT user_id FROM access WHERE hash = ?');
$stmt->execute(array($_COOKIE['sid']));
$user_id = $stmt->fetchColumn();
$stmt = $conn->prepare('SELECT * FROM users WHERE id = ?');
здесь зачем 2 запроса? У вас в 1 можно все выбрать, не делайте лишних запросов.if (isset($_POST['submit'])) {
тоже не совсем верная проверка, для этого есть $_SERVER['REQUEST_METHOD'] == 'POST'
, и дальше у вас без проверок используются всякие post переменные... Их вообще то надо как-то проверить...if ($user) {
старайтесь так не делать, проверяйте хотя бы !empty(). а по поводу того, что я сказал выше, как думаешь?там много чего, что конкретно?
Как я понял лучшим решением является доп. таблица, в которой будут id пользователя, hash, и дата создания этого ключа доступа, чтобы их потом удалятьдостаточно поле в таблице пользователей, дополнительная таблица нужна только если вы хотите чтобы пользователь имел возможность запоминать себя с нескольких разных устройств. Дата опциональна, так как галочка "запомнить меня" подразумевает "навсегда", в крайнем случае можно задать время жизни авторизационной куки.
об этом решении мне рассказал @DevManподозреваю что имел он в виду не сессионную куку, и соответственно некоторую настройку сервера на время жизни сессионных файлов. По мне не лучшее решение, так как требует некоторых телодвижений по настройке сервера, что не всегда возможно. Да и минусы использования устаревших сессий я уже описал.
а почему нельзя задать сессии name с этим ключом, а потом просто получить сессию по ключу?
if($_SESSION['user']['is_logged'] == true){...}