Задать вопрос
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    session_start(); вынесите наверх, за все проверки, его по хорошему вообще в начало индексного файла выносят и больше не вспоминают.
    в вашем случае isset() лучше заменить на !empty()
    $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().
  • Не отправляется сообщение на почту и как её подключить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    Шикос, классический лапшекод, отдающий легкими нотками гуано...
  • Не записываются данные в таблицу Mysql, как исправить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    Ira_Gushina, вообще, если код не исполняется, логично что в эту функцию не заходит, она не вызывается. Ищите и проверяйте условия где она вызывается.
  • Как вы решили проблему адаптивности таблиц?

    ThunderCat
    @ThunderCat Куратор тега CSS
    еще иногда что-то можно заменить иконками вместо длинных слов/фраз, можно и легенду снизу/сверху прикрепить...
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly, хм, прикольно, прям не так уж сложно? Куда только разработчики браузеров смотрят!..
    На самом деле такие уязвимости легко тестируются, есть даже онлайн сервисы, ну и соответственно легко закрываются в случае наличия. Не так все просто. Хотя вообще где вы нашли это, что куку легко угнать?
  • Как вы решили проблему адаптивности таблиц?

    ThunderCat
    @ThunderCat Куратор тега CSS
    Ну неужели так прям никак? Скролл, хайдить столбики... в любом случае нельзя нормально впихнуть невпихуемое...
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly, вау, если угонят куку то что мешает юзер агент подделать? На самом деле угон куки - редкое явление, в крайнем случае, если прям такая паранойя - токен еще можно прикрутить... ну и озаботиться больше защитой от xss и прочих скрипт инжекшнов. И то пользы больше будет.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    а по поводу того, что я сказал выше, как думаешь?
    там много чего, что конкретно?
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    Как я понял лучшим решением является доп. таблица, в которой будут id пользователя, hash, и дата создания этого ключа доступа, чтобы их потом удалять
    достаточно поле в таблице пользователей, дополнительная таблица нужна только если вы хотите чтобы пользователь имел возможность запоминать себя с нескольких разных устройств. Дата опциональна, так как галочка "запомнить меня" подразумевает "навсегда", в крайнем случае можно задать время жизни авторизационной куки.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    об этом решении мне рассказал @DevMan
    подозреваю что имел он в виду не сессионную куку, и соответственно некоторую настройку сервера на время жизни сессионных файлов. По мне не лучшее решение, так как требует некоторых телодвижений по настройке сервера, что не всегда возможно. Да и минусы использования устаревших сессий я уже описал.
  • Не записываются данные в таблицу Mysql, как исправить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    Ira_Gushina, хм, я вроде написал как сделать... Прочесть, переписать и повторить.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    а почему нельзя задать сессии name с этим ключом, а потом просто получить сессию по ключу?

    во первых сессионные файлы имеют короткий ливтайм, и это правильно. Во вторых в них могут храниться не валидные данные, например устаревшие из-за изменения с другой машины, в третьих вы через неделю их не найдете, по причине "во первых". Если вы выходили из сервиса, правильнее снова авторизироваться (автоматически или руками - нет разницы). И при закрытии браузера у вас не будет сессионной куки и ваш код выдаст варнинг, то есть вы чего то там придумываете странное и совершенно с кривой логикой, хотя все укладывается в 5 строк кода.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly, сессионные куки убиваются если вы закрыли браузер. Обычные куки имеют время жизни, которое вы указываете. Для автологина достаточно завести куку у клиента с определенным ключом, сгенерированным рандомно, например соленый хеш от текущего времени. Этот же ключ заносится в бд пользователя, как ключ авторизации по куке. При заходе пользователя на сайт достаточно проверить что он 1) Не залогинен 2) Имеет куку с ключом. Проверяем правильный ли ключ и логиним в случае если верный.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly, это во первых зависит от настроек и вовсе не обязательно. А во вторых к авторизации никак не относится. Тем более к айпи и браузеру. И реализуется по другому.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly, как то у вас странно вообще понимание авторизации в голове легло.
    1) ВСЕГДА стартуем сессию в начале.
    2) Сессию проверяем на наличие флага логина. Все, больше ничего для этого не нужно, никаких хешей, агентов и айпи. if($_SESSION['user']['is_logged'] == true){...}
    3) Куки трогать НЕ НАДО, у вас есть нормальный интерфейс сессии.
    4) Если в сессии нет флага логина - выводим форму логина, если есть - из сессии же из юзера берем имя и выводим.
    5) При логине, при совпадении логина и пароля в сессию пишем флаг авторизации и нужные данные пользователя.
    Конец.
  • Как кнопкой менять аргументы в конструкторе new?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    Alex Lapikov, Allow symbol change включает возможность выбора символа через интерфейс виджета, на сайте нормального апи я не вижу, то есть снаружи вы сильно не поколупаетесь, разве что возиться с исходным кодом виджета "вручную". Штатные средства программного взаимодействия там не прописаны.
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    для этого это и нужно, чтобы в следующий раз не вводить пароль
    что нужно???
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    if ($user['password'] == $_POST['password']) {
                    session_id($user['id']);
                    session_start(); // убрать, только в начале нужно
  • Правильно ли сделана авторизация через сессии?

    ThunderCat
    @ThunderCat Куратор тега PHP
    4sadly,
    и как я положу в массив $_SESSION['user'] пользователя, если при его получении там есть пароль, или мне лучше создать новый массив без пароля и засунуть туда?

    $stmt = $conn->prepare('SELECT id,password FROM users WHERE login = ?');
    тут можно вытащить нужные поля, не только id,password и тд, и из них выбрать что нужно хранить и засунуть в сессию.

    А как тогда лучше проверять тот человек или нет?
    Никак, или попросите паспорт предъявить. То что человек ввел логин и пароль является для вас гарантией идентификации, а то что третьим лицам пароль достался под воздействием психотропных препаратов, терморектального криптоанализа или стырен с бумажки на мониторе вас волновать не должно. Вас волнует совпадение логина и пароля. Все. В сессию записали - условный вася ввел правильные данные. Все.
  • Как кнопкой менять аргументы в конструкторе new?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    Alex Lapikov, по логике - если вы инициализируете этими данными, скорее всего там много завязано на работу конкретно с этими данными, просто сменив внутри переменную нифига не поможет. Это предположение. ВОЗМОЖНО в виджете есть метод смены символа, как интерфейс, а возможно нужно пересоздавать объект, без кода это все гадание.