Есть такой код в шаблоне PHP: {* Шаблон главной страницы *} {if isset($user)} <p><a href="/product/">Перейдите пожалуйста по ссылке -></a></p> {else} <h3>Для входа в систему авторизуйтесь.</h3> {/if} Когда проходит авторизация (здесь все нормально), висит все тот же "Для входа в систему авторизуйтесь.", и только когда перезагружаешь страницу второй раз, показывается корректный вариант из условия. В чем может быть загвоздка?
вангую танцы от куки, которая на этой странице устанавливается, но ещё не прислана. а так делать не надо. надо от сессии танцевать. сессия это хорошо.
После того, как прошла аутентификация (чтоб нас @Fell-x27 не ругал ), надо делать редирект, а не выводить какой-то шаблон. Можно даже редирект самого на себя, но обязательно редирект. Это касается любых форм, передающихся post
Ну само собой понятное дело. Я с сессией никак не подружусь. Ходит где-то, чую рядом где то. Во фронт контроллере, то есть index.php PHP: // если в сессии есть данные об авторизованном пользователе, то передаем // их в шаблон if (isset($_SESSION['user'])) { $smarty->assign('user', $_SESSION['user']); } --- Добавлено --- А куда его, это редирект ставить? В контроллер? В модель?
Вот например в таблице пользователей есть пользователь, и конечно у него есть идентификатор. Как нужно сверять сессию устанавливаемую браузером, с идентификатором пользователя. Я вот это никак не могу понять.
Браузер не устанавливает сессию, сессию открывает php, создаёт её идентификатор, файл, соответствующий этому идентификатору в служебной папке (можно настраивать), и пишет в куку идентификатор сессии. Потом эта кука приходит, php находит файлик и загружает его содержимое в $_SESSION, а перед завершением работы скрипта - выгружает содержимое $_SESSION обратно в файлик. Таким образом, тебе остаётся только стартануть сессию и записать туда user_id, об остальном позаботится сам php
Этот каталог по умолчанию /tmp. Просто как дополнение к ответу. И тут надо быть внимательным. На ряде debian-based дистрибутивов каталог /tmp автоматически чистится по расписанию операционкой. Выпиливая, в том числе и сессии. Тонкости, увы, не помню, но, вроде как чистятся только файлики старше какого-то интервала. В любом случае, это надо учитывать. Особенно любителям делать сессии, не умирающие месяцами.
Это просто сериализация массива с сохранением в файл. И десериализация обратно, где идентификатор куки - имя файла. Механизм простой как пробка. Можно даже собственный реализовать, но не нужно. По крайней мере пока.
Значит, приходит неизвестный пользователь, сервер создает сессию (запоминает его), потом этот пользователь вводит логин и пароль и нажимает войти. Сервер смотрит и обновляет уже существующую сессию. Так? Но я не могу понять вот это $_SESSION['user'] , вот в месте где user можно написать любое слово? --- Добавлено --- Как сессия определяет логин пользователя. Туплю, никак не могу понять.
Сессия что, запоминает пользователя вот так? ... 'id' => '45', 'username' => 'Чувак', 'password' => ' здесь типа md5(длинная-длинная строка)', ... или не так?
Пишешь в сессию обычно id пользователя, потом проверяешь - если он туда записан, значит пользователь прошёл аутентификацию, и считываешь из базы его данные. В принципе, можно и все данные туда записать, но это хуже, к примеру, ты не сможешь сделать принудительное разлогирование. Потом, когда пользователя надо разлогинить, просто удаляешь его id из сессии, и радуешься. Сессия - это просто хранилище данных между вызовами скриптов, чего туда пихать и зачем, и что делать с тем, что ты туда запихал, определяешь ты сам.
Совершенно любое. Это просто ключ в массиве. Ты его сам определяешь. Хоть user, хоть motherfucker. Это просто ключ массива. --- Добавлено --- Никак. Ты сначала логин пишешь в сессию с тем ключом, который захотел, потом читаешь его из массива по этому же ключу. Я вот логин храню под ключом login, а не user, к примеру. Сессии плевать, что ты у нее спрашиваешь. Механизм не знает ничего о логинах, паролях, он туп как пробка. Он умеет только сохранять массив на винт и читать его оттуда. Что в этом массиве хранится и какой смысл имеет - это только от тебя зависит. --- Добавлено --- То есть нет никакой "сессии, хранящей пользователя". Есть сессия, которая хранит то, что ты счел нужным хранить в ней. Хэш от пароля, к примеру, я не знаю зачем тебе в ней хранить. Где он тебе пригодится? Для аутентификации? Дык просто в сессии храни флаг, что $_SESSION['logged_on'] = true; и проверяй его наличие. Зачем лезть в БД на каждый чих, сверяя хэш пароля, который был введен единожды и не будет меняться до конца сессии, так как выставляется только при входе на сайт? Просто выставляй проверку залогиненности.