Работа с PHP сессиями и куками пользователя.

Программирование Веб программирование Работа с PHP сессиями и куками пользователя.

Помечено: , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 нед. назад.

  • Автор
    Сообщения
  • #5312
    @admin

    Основные моменты при работе с сессиями. Описание механизма работы. Как сессии попадают в куки, или в заголовки HTTP ответов?

    Сессия — данные, которые хранятся на сервере (в файлах, в кеше, в базе данных…). Доступ к ним можно получить по уникальному идентификатору. Доступ есть только через сервер, поэтому это хранилище считают защищенным. Доступ к сессиям через глобальную PHP переменную $_SESSIONS.

    Куки — данные, которые хранятся у клиента (в браузере, в приложении…). Могут быть закрыты клиентом или не поддерживаються. Могут подменяться клиентом или третьей стороной. Доступ к кукам, через глобальную PHP переменную $_COOKIES.

    Для подключения к хранилищу сессий есть в PHP функция session_start(). При вызове этой функции, автоматически подхватывается из HTTP запроса — уникальный идентификатор сессии, или, если такого нет, создается новый. Поэтому важно вызвать session_start() до установки заголовков headers. В конце выполнения PHP скрипта, выполняется сериализация $_SESSIONS и запись в хранилище сессий, по уникальному идентификатору, или используя функцию session_write_close()

    Важно понимать, что если хранить данные в файлах (как и сделано в пхп по умолчанию), то при обращении к ресурсу нескольких тысач пользователей, сервер начнет загибаться, т.к. файлы хранятся в одной папке и будет много операций чтения/записи. Решение проблемы: хранить сессии, например в кеше. Также не нужно создавать сессию, если в ней нет необходимости.

    Удаление сессии

            // Удаляем куки сессии,
            setcookie(session_name(), session_id(), time()-60*60*24);
            // Удаляем сессию
            session_unset();
            session_destroy();


    Автоматическое удаление сессии. Очистка муссора.

    PHP сам чистит старые, не используемые сессии, для этого есть механизм garbage collection. В php.ini есть параметры, отвечающие за настройку этого механизма session.gc_probability и session.gc_divisor.

    Зависание сессии. Dead lock в сессиях

    Для того, чтобы иметь доступ к сессиям и уменьшить вероятность запирания сессии одним процессом, рекомендуется после каждого обращения к сессии, закрывать автоматически сессию, вызвав функцию session_write_close(). В таком случае дальнейшее поведение скрипта не будет влиять на файл сессий.

    Особенности использования session_set_cookie_params()

    До использования функции session_set_cookie_params() необходимо установить session_name(), иначе передача идентификатора сессии в ответ запроса не произойде. Это просто особенность работы с сессиями.

Для ответа в этой теме необходимо авторизоваться.