Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу Сессии
  • Почему сессия начинается каждый раз заново и она не сохраняется?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сессия - это куки.
    Открываешь консоль разработчика, вкладка сеть, и смотришь, какую ку-ку тебе ставит пхп, какую посылает браузер.
    Так можно будет хотя бы понять кто косячит.

    Хотя конечно наиболее вероятная причина - Бом не даёт стартовать сессию, а ты этого не видишь потому что задавлены ошибки в пхп.
    Ответ написан
  • Почему возникает ошибка при ограничении доступа к профилю для незарегистрированных юзеров?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо понимать что слово "ютубер" это синоним слова "криворукий идиот".
    И проблемы в этом коде куда более серьёзные, чем банальная ошибка, которая лечится с помощью isset()

    Куда важнее две ДЫРИЩИ в этом коде, при наличии которых что ограничивай - что не ограничивай, но по сайту будет ходить кто захочет и как захочет.

    Во-первых, этот код вообще ничего не ограничивает. Потому что после отправки заголовка Location надо всегда принудительно завершать работу скрипта. потому что сама по себе отправка заголовка это, разумеется, не делает. И клиент может тупо заголовок проигнорировать и вместо редиректа получить саму страницу.
    Во-вторых, разумеется банальнейшая SQL инъекция, с помощью которой кто угодно сможет залогиниться под кем угодно, вообще не зная ни одного пароля
    Ответ написан
    9 комментариев
  • Где хранить сессии? SQLite? MySQL? Memcached? Redis? FS?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Храни в мускуле.

    Файлы, действительно - самый неудачный вариант. Сара Големон, отвечая недавно на подобный вопрос, написала
    File storage is only a default because the runtime doesn't know in advance what database engine or credentials you're going to use unless you tell it. So... ya know.... tell it.

    То есть файлы - это от безысходности, и по-хорошему пхп бы хранил в базе, но просто не знает, в какой и как с ней соединяться.

    Редис и мемкеш - это кэш, а не хранилище. Подумай над тем, что такое кэш и для чего он используется. И подходит ли кэш для хранения сессий.

    Про скулиту ты все правильно написал. Те же файлы, вид сбоку.

    А про мускуль очень смешно. Какая-то прямо повальная датабазебоязнь. Откуда это "я вообще хочу минимизировать запросы к MySQL"? Что за ерунда про "соединение может оборваться"? И как ты вообще можешь сравнивать по производительности файл на диске, который открывается при каждом запросе, с демоном, который держит все данные в памяти и отдает по сокету?
    Ответ написан
    32 комментария
  • Где хранить id сессии php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос какой-то странный.
    Идентификатор сессии не нужно хранить.
    Единственная его функция - это предаваться на сервер с каждым запросом.
    Содержимое localStorage само по себе на сервер не передаётся. То есть смысла класть туда ид сессии я не вижу.

    Кроме кук нормальных вариантов все равно нету.
    Если пользователь хочет отключить куки - это значит что он хочет отключить и сессии.
    Имеет полное право.
    Ответ написан
    Комментировать
  • Реализация правильной опции "запомнить меня" и завершение сеансов удаленно?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Генеришь токен из random_bytes() (ну или UUID) и кладешь его в куки и в базу.
    Соответственно получаешь токен из куки и по базе находишь юзера.
    Если надо разлогинить, то генеришь новый токен.

    Использовать ли при этом сессию - вопрос вкуса, и в общем-то второстепенный. Можно использовать, можно не использовать
    Ответ написан
    Комментировать
  • Почему сбрасывается session_id в сайте на wordpress?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Недавно на реддите был большой хай на эту тему.
    Из него я узнал, что

    1. есть как минимум 1 спец вордпресс хостинг, который убивает РНР сессии
    2. вордпресс не использует РНР сессии в вам не советует
    3. если на твоем вордпресс сайте используются сессии - это значит используется плагин из говнокода
    Ответ написан
  • В каких случаях данные из сессии сериализуются и пишутся в файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Должен быть перезаписан
    2. Без разницы. Можо делать или так, или эдак. Или и так и эдак.

    Сама по себе операция какая-то бессмысленная. Не нужно хранить объекты в сессии. Можно хранить в сессии пару атрибутов, которые инжектить в объект при создании.
    Ответ написан
  • Могут ли украсть сессию php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, в теле вопроса написано совсем не то, что в заголовке.

    Отвечаем на оба вопроса

    Могут ли украсть сессию php?
    при нормальных настройках сайта (httponly cookies, SSL) - практически нереально. Только трояном с компа. Но если есть доступ к компу, то с сессиями уже заморачиваться как-то мелко.
    Хотя я не очень уверен насчет расширений браузера/тулбаров. Думаю, что они доступ к кукам имеют свободный.

    Может ли другой человек узнав ID сессии и приписав его в свой php скрипт получить доступ к данным сессии моего сайта?
    Разумеется, может.

    Только не описанным способом, конечно. Идентификация происходит через cookies. Соответственно, узнав ID, надо просто отправить нужный session_id со своего сервера или браузера.
    Ответ написан
    1 комментарий
  • Как получить доступ к переменным сессии?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    session_start()
    Ответ написан
    Комментировать
  • Какие есть статьи про сессии на php которым можно доверять?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Авторизация на сессиях ничем не отличается от авторизации на куках, за исключением того, сессия сама генерирует хэш и ставит куку.

    Поэтому если ты считаешь, что этот код работает безопасно, то просто замени установку и проверку куки на установку и проверку сессионной переменной.
    Ответ написан
    Комментировать
  • PHP. Правильный подход для создания класа для работы с сессеями?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Структура кода никуда не годится. Архитектуру надо строить по образцу вот этого фреймворка: https://github.com/Herzult/SimplePHPEasyPlus
    Ответ написан
    Комментировать
  • Как передать переменные сессии Perl в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Выставляй переменную окружения env
    В перле это должно быть просто, в РНР - getenv()
    Ответ написан