php cookie время жизни

Настройка времени сессий в PHP

Существуют разные способы установки времени жизни сессий. Попробуем разобраться на примере операционной системы Linux.

Как узнать время жизни сессии

Перед настройкой, стоит посмотреть текущее состояние. Есть несколько методов это сделать:

1. На сервере командой php

Получаем список параметров, имеющих отношение к сессиям. Нас интересуют:

Данные значения — значение по умолчанию. cookie_lifetime => 0 говорит о действии файлов куки до закрытия браузера, если задать этому параметру определенное значение, сессия будет прерываться при активном сеансе, поэтому лучше ее оставлять в значении ноль.

2. C помощью php-функции ini_get

Настройка сессий на веб-сервере

Выполняется путем настройки файла php.ini. Данный способ удобен, если мы являемся администратором веб-сервера, а также если есть гарантия, что общая настройка сессий не повлияет на работоспособность всех веб-приложений, работающих на данном сервере.

Открываем на редактирование php.ini. Его расположение зависит от сборки Linux. Точный путь можно посмотреть командой:

Теперь открываем сам файл:

В некоторых системах, например, Ubuntu или Debian для каждой среды обработки кода создается свой php.ini файл, а также для каждой версии PHP. Например, по пути /etc/php/7.4/fpm/php.ini находится файл для php-fpm для PHP версии 7.4. Нам необходимо учитывать данный факт, чтобы настроить нужный файл.

И редактируем следующие параметры:

session.gc_maxlifetime = 86400
session.cookie_lifetime = 0

* где параметр gc_maxlifetime указывает на временя в секундах, после прошествии которого данные могут быть удалены; cookie_lifetime — время жизни файлов cookies; 86400 — 24 часа в секундах.
* если параметру gc_maxlifetime задать значение 0, действие сессий будет бесконечным. Это, как правило, не стоит делать — приведет к падению производительности и безопасности сервера.

После настройки параметров, необходимо перезагрузить сервер, являющийся интерпретатором PHP.

systemctl restart apache2 || systemctl restart httpd

* в версиях Linux без systemd используем команду service apache2 restart или service httpd restart.

Если используем FastCGI (PHP-FPM).

systemctl restart php-fpm

б) для Ubuntu или Debian:

systemctl restart php7.4-fpm

* где 7.4 — версия используемого PHP.

Данный файл позволяет веб-мастеру управлять некоторыми настройками веб-сервера. Для его редактирования нужен доступ к файлам сайта. Способ не сработает, если в качестве обработчика PHP используется не Apache, а, например, NGINX + PHP-FPM. Хотя, тут тоже есть способ (о нем будет ниже).

php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0

* как можно заметить, параметры те же, что при настройки через php.ini.

Как говорилось выше, метод не сработает, если не используется Apache. Однако настройку можно выполнить на сервере (опять же, у нас должен быть соответствующий доступ).

Открываем файл настройки веб-сервера, например, в php-fpm:

php_value[session.gc_maxlifetime] = 86400
php_value[session.cookie_lifetime] = 0

После перезапускаем сервис:

systemctl restart php-fpm || service php-fpm restart

Задание параметра в коде приложения

Способ может быть полезен, когда разные страницы портала должны иметь разное время жизни сессии. Для этого можно воспользоваться PHP-функциями ini_set и session_set_cookie_params, например:

Функции обязательно вызывать до открытия сесии (session_start).

Установка сессии в приложении

Некоторые приложения могут переопределять настройки. В таком случае, задать время жизни сессии необходимо в параметрах программы. У каждого приложения свои настройки, в которых необходимо самостоятельно разобраться. Приведем для примера настройку сессии в CMS Битрикс.

Как автоматически продлевать сессии

Если сессия выдается на определенный период и заканчивается в определенное время, это может привести к прерыванию активного сеанса пользователя. Гораздо удобнее, если время действия сессии будет автоматически продлеваться, если посетитель обновляет страницу. Для этого существует параметр cookie_lifetime, который во всех примерах выше мы задавали в значении 0.

Если мы зададим значение cookie_lifetime 86400, то через 24 часа сессия прервется. Это не всегда удобно.

Если есть необходимость в контроле и прерывании сессии, можно воспользоваться php-функцией session_destroy().

Путь хранения файлов сессий

Место хранения файлов сессий задается параметром session.save_path также, так время жизни. По умолчанию, может использоваться путь /var/lib/php/sessions.

Это важный параметр — если у веб-сервера будут отсутствовать права на запись в данный каталог, это приведет к невозможности хранить сессии, что вызовет неожиданные результаты работы приложений.

Источник

PHP Cookie — практические примеры использования

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Привет, друзья. Пришло время поговорить о том, что такое PHP cookie, как их установить, удалить, перезаписать и где они используются. Этот урок для начинающих и полных чайников в программировании, поэтому буду показывать на конкретных практических примерах. Итак, что же такое куки в PHP? Это один из способов хранения определенных данных на стороне клиента. Если говорить проще, то куки хранятся в браузере пользователя. Например при авторизации. Когда юзер отправляет данные, они сохраняются на устройстве. Теперь давайте ближе к делу или сразу к видео

Как установить куки в PHP

Все не так сложно, как может показаться. Установка cookie происходит следующим образом:

Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7! Семь, Карл! И вот для чего каждый из них нужен.

1NameНазвание (имя) cookie
2ValueЗначение (как правило переменная)
3ExpiresВремя жизни куки
4PathПуть для которого будут сохранены куки
5DomainМожно указать поддомен (‘.domain.ru’)
6SecureИспользование только на HTTPS (true или false)
7HttpOnlyИспользование только на HTTP (true или false)

В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.

setcookie(‘name’, 5, time()+60)

Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.

Как получить, прочитать, проверить cookie в PHP

В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.

Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.

Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.

Теперь у нас есть условие и его можно использовать в некоторых случаях.

Авторизация с использованием PHP Cookie

Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.

Источник

setcookie

(PHP 4, PHP 5, PHP 7, PHP 8)

setcookie — Отправляет cookie

Описание

Альтернативная сигнатура доступна с PHP 7.3.0:

Список параметров

(Под)домен, которому доступны cookie. Задание поддомена (например, ‘www.example.com’ ) сделает cookie доступными в нем и во всех его поддоменах (например, w2.www.example.com). Для того, чтобы сделать cookie доступными для всего домена (включая поддомены), нужно просто указать имя домена (то есть ‘example.com’ ).

Возвращаемые значения

Список изменений

Примеры

Ниже представлено несколько примеров, как отправлять cookie:

Пример #1 Пример использования setcookie()

Пример #2 Пример удаления cookie посредством setcookie()

Чтобы удалить cookie достаточно в качестве срока действия указать какое-либо время в прошлом. Это запустит механизм браузера, удаляющий истёкшие cookie. В примерах ниже показано, как удалить cookie, заданные в предыдущих примерах:

Пример #3 setcookie() и массивы

Имеется возможность помещать в cookie массивы. Для этого каждому cookie нужно дать имя в соответствии с правилами именования массивов. Такая возможность позволяет поместить столько значений, сколько имеется элементов в массиве. При обратном получении все эти значения будут помещены в массив с именем этого cookie:

Результат выполнения данного примера:

Замечание: Использование разделительных символов, таких как [ и ] как часть имени файла cookie, не соответствует RFC 6265, раздел 4, но предполагается, что оно поддерживается пользовательскими агентами в соответствии с RFC 6265, раздел 5.

Примечания

Чтобы иметь возможность отправлять вывод скрипта до вызова этой функции, можно воспользоваться буферизацией. В этом случае весь вывод скрипта помещается в буфер на сервере и остаётся там, пока вы явно не отправите его браузеру. Управление буферизацией осуществляется функциями ob_start() и ob_end_flush() в скрипте, либо можно задать директиву output_buffering в файле php.ini или конфигурационных файлах сервера.

При многократных вызовах setcookie() функции выполняются в том порядке, в котором вызывались.

Источник

Защита идентификатора сессий в PHP

Безопасность веб-сайтов основывается на управлении сессиями. Когда пользователь подключается к безопасному сайту, он предоставляет учетные данные, как правило, в форме имени пользователя и пароля. Веб-сервер не имеет представления о том, какой пользователь уже вошел в систему и как он переходит от страницы к странице. Механизм сессий позволяет пользователям не вводить пароль каждый раз, когда они хотят выполнить новое действие или перейти к новой странице.

В сущности, управление сессией гарантирует, что в настоящее время соединен тот пользователь, который проходил авторизацию. Но, к сожалению, сессии стали очевидной мишенью для хакеров, поскольку они могут позволить получить доступ к веб-серверу без необходимости проверки подлинности.

После аутентификации пользователя, веб-сервер предоставляет ему идентификатор сессии. Этот идентификатор хранится в браузере и подставляется всякий раз, когда нужна проверка подлинности. Это позволяет избежать повторяющихся процессов ввода логина/пароля. Все это происходит в фоновом режиме и не доставляет дискомфорта пользователю. Представьте, если бы вы вводили имя и пароль каждый раз, когда просматривали новую страницу!

В данной статье я постараюсь изложить все известные мне способы защиты идентификатора сессии в PHP.

Использование cookie

По умолчанию вся информация о сессии, включая ID, передается в cookie. Но так бывает не всегда. Некоторые пользователи отключают cookie в своих браузерах. В таком случае браузер будет передавать идентификатор сессии в URL.

php_flag session.use_only_cookies on

Использование шифрования

Если на вашем сайте должна обрабатываться конфиденциальная информация, такая как номера кредитных карт (привет от Sony), следует использовать SSL3.0 или TSL1.0 шифрование. Для этого при установке cookie следует указывать true для параметра secure.

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

Проверка браузера

Чтобы отсечь возможность использования сессии с другого браузера (компьютера), следует ввести проверку поля HTTP-заголовка user-agent:

Срок действия сессии

# Время жизни сессии в секундах
php_value session.gc_maxlifetime 3600
# Время жизни куки в секундах
php_value session.cookie_lifetime 3600

Привязка по IP-адресу

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

либо по IP-адресу для каждого запроса (только для статичных IP):

Следует осознавать, что полностью избежать взлома невозможно. Можно только максимально усложнить этот взлом любыми известными способами. Однако следует также не забывать о своих легальных пользователях, чтобы не осложнить им жизнь такой защитой.

Источник

Учимся работать с cookie в PHP

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

В сегодняшнем уроке мы поговорим о работе с cookie в PHP. Начнём с того, что же это такое, для чего это нужно и почему оно вообще появилось.

Как мы с вами уже знаем, в PHP мы можем работать с GET- и POST-запросами. Они позволяют нам передавать серверу данные, чтобы как-то повлиять на работу кода. Мы можем передать скрипту логин и пароль, он их проверит и разрешит нам доступ к какой-либо информации. Однако, это не позволит создать сессию между нами и сервером. То есть сервер не может нас «запомнить», и каждый раз, как мы хотим сказать что это мы, придется отправлять отдельный новый запрос с логином и паролем.

Для чего нужны cookie

В качестве решения придумали cookie. Это такие записи с типом ключ-значение, типа массива в PHP, только хранятся они в браузере у пользователя сайта. Для каждого сайта cookie хранятся отдельно. Каждый раз, когда пользователь обращается с запросом на сайт, браузер проверяет наличие этих записей для данного сайта. И если они имеются, то он отправляет их в заголовке каждого запроса к этому сайту.

Откуда берутся cookie

Cookie создаются в браузере по «просьбе» сервера. В какой-то момент мы решаем, что нужно в браузере посетителя создать cookie с каким-то значением. Для этого нужно чтобы сервер передал в ответе клиенту специальный заголовок, в котором указано, какую запись нужно создать в браузере для данного сайта.

Всё это происходит в фоне и не заметно для пользователя. По этому принципу работает авторизация на любом сайте. В простейшем случае, после того как вы ввели логин и пароль на сайте, сервер проверяет, верны ли они. И если да, то сервер может попросить браузер сохранить эти данные в cookie и при каждом запросе отправлять их ему.

То есть сервер примерно говорит: «Эй, браузер, создай запись для меня с ключом “login” и значением “admin”, и ещё одну с ключом “password” и значением “123”». После этого браузер при любом запросе к серверу начинает отправлять дополнительные данные типа:

После этого в других местах сайта, где нужна авторизация, теперь можно будет проверить эти данные из cookie, не заставляя пользователя заполнять форму заново. И если они являются верными логином и паролем, то давать пользователю доступ к чему-либо.

То есть, например, на странице с формой авторизации при верном логине и пароле будем устанавливать cookie, а на остальных страницах уже проверять данные из cookie, переданные клиентом.

Про время жизни

При этом у cookie есть TTL (Time To Live – время жизни). То есть эти записи могут быть временными. Это время жизни так же указывается сервером во время установки cookie в браузер. Благодаря этому можно сделать так, чтобы сессия длилась пол часа. А после этого времени пользователю надо будет авторизоваться снова. Наверняка вы замечали это в действии на многих сайтах.

Как работать с cookie в PHP

Итак, мы в общих чертах разобрались с тем, как работают cookie. Давайте теперь посмотрим, как с ними можно работать в языке PHP.

Давайте создадим в нашем проекте файл с именем viewCookies.php. Поместим в него следующий код.

Как вы уже должны были догадаться, $_COOKIE — это еще один глобальный массив в PHP, аналогично массивам $_GET и $_POST. Только в нём хранятся все cookie, которые были отправлены браузером в рамках текущего запроса.

Давайте посмотрим на работу данного скрипта, открыв в браузере страницу: http://myproject.loc/viewCookies.php

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Параметры функции setcookie()

Имя параметраПредполагаемый типЗначение
namestringИмя cookie-файла (аналогичное имени переменной)
valuestringЗначение, которое должно быть сохранено в cookie-файле (аналогично значению, которое должно было быть присвоено переменной). Если этот параметр не задан, то cookie-файл, указанный в качестве первого параметра, удаляется
expireintЗначение, определяющее, когда должен истечь срок существования данного cookie-файла. Значение 0 (применяемое по умолчанию) указывает, что cookie-файл должен существовать до закрытия программы браузера. Любое другое целое число интерпретируется как абсолютное значение времени в секундах, когда cookie-файл должен стать недействительным
pathstringПуть в адресной строке. Если задать ‘/’, cookie будут доступны из всех директорий сайта. Например, и в http://myproject.loc/ и в http://myproject.loc/posts/. Если задать ‘/posts/’, cookie будут доступны только из директории http://myproject.loc/posts/ и всех ее поддиректорий (например, http://myproject.loc/posts/new/). По умолчанию значением является текущая директория, в которой cookie устанавливается. Если мы хотим, чтобы cookie была доступна на всём сайте, то нужно устанавливать это значение в ‘/’. В обозначении пути должна обязательно присутствовать заключительная косая черта
httponlyboolCookie-файлы, заданные с этим флагом, передаются только с помощью запросов протокола HTTP. Значением по умолчанию является FALSE
domainstringВ случае, предусматриваемом по умолчанию, проверка домена, доступа к которому требует клиент, не производится. Если же данный параметр не пуст, то имя домена должно совпадать с ним. Например, если один и тот же сервер обслуживает домены www.mysite.com и forum.mysite.com, то в коде одного сайта можно обеспечить, чтобы на другом сайте не считывались (и не устанавливались) его cookie-файлы, присвоив параметру domain значение ‘forum.mysite.com’.
secureboolЗначением по умолчанию является 0 (false). Если этот параметр равен 1, или true, то cookie-файл будет передаваться только через соединение с защищенным сокетом (иначе говоря, по протоколу SSL или HTTPS). Обратите внимание на то, что установка такого cookie-файла возможна только при условии, что защищенное соединение уже открыто

Есть еще несколько параметров, о них вы можете прочитать в официальной документации.

А теперь давайте попробуем эту функцию в деле. Создадим файл setCookies.php и запишем в него следующий код:

После этого перейдём по адресу http://myproject.loc/setCookies.php, где увидим пустую страницу. Как мы уже говорили, работа с cookie не видна пользователю.

Однако, эту работу всегда можно увидеть в консоли разработчика Google Chrome. Давайте откроем её (нажатием F12), перейдём во вкладку Network, обновим страницу в браузере и найдём её в списке загруженных данных (она там одна).

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Нажмем на эту запись и в открывшемся справа окне выберем вкладку Headers. Здесь, в секции Response Headers мы можем видеть заголовок Set-Cookie с указанными нами данными.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Как мы видим, теперь на сервер передаются cookie, ранее установленные в браузере. Увидеть их можно и в запросе, посмотрев в консоли разработчика секцию Request Headers.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Если вам нужно посмотреть все cookie, которые имеются в браузере для данного сайта — можно посмотреть их в той же консоли разработчика Google Chrome. Для этого перейдем во вкладку Application, выберем в левом списке пункт Cookies, а внутри него наш сайт.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Все cookie будут представлены в виде удобного списка.

Обратите внимание, что тут же их можно и отредактировать! То есть пользователь нашего сайта в любой момент может сделать себе абсолютно любые куки. Поэтому не стоит считать, что куки пришедшие в запросе это всегда значения, заданные нашим сервером. Всегда стоит проверять их на валидность, так же как и данным, пришедшим в POST- и GET-запросах

Что еще нужно знать про cookie

И в заключение данного урока нужно добавить, что cookie устанавливаются с помощью заголовка в ответе сервера по протоколу HTTP. Протокол HTTP устроен таким образом, что заголовок должен всегда идти перед данными, и никак иначе. Таким образом, функция setcookie и любые другие функции в PHP, изменяющие заголовок в HTTP-ответе, должны вызываться до любого вывода данных.

Можно сначала задать cookie, а затем вывести текст.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Всё прекрасно отработает.

Но нельзя вывести текст (являющийся телом HTTP-ответа), а затем пытаться установить cookie.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Как мы видим, это приведет к ошибке. Так устроен протокол HTTP. Сначала — заголовок, затем — тело. Только так и никак иначе.

Установка нескольких cookie

Нет ничего проще, чем установить несколько cookie. Для этого нужно просто несколько раз вызвать функцию setcookie.

php cookie время жизни. Смотреть фото php cookie время жизни. Смотреть картинку php cookie время жизни. Картинка про php cookie время жизни. Фото php cookie время жизни

Они успешно будут переданы клиенту.

Удаление cookie-файлов

Задача удаления cookie-файла решается просто. Достаточно вызвать функцию setcookie() точно с такими же параметрами, как и при установке cookie-файла, за исключением самого значения, которое должно быть задано в виде пустой строки. Такой вызов не приводит к тому, что устанавливается cookie-файл со значением, равным пустой строке, а фактически влечет за собой удаление cookie-файла. Следует учитывать, что, если при установке cookie-файла использовались параметры с указанием пути или домена, эти параметры необходимо также применять для отмены установки cookie-файла. Еще один метод удаления cookie-файлов состоит в том, чтобы задавать время истечения срока хранения в прошлом.

Пример полноценного взаимодействия с пользователем через cookie мы рассмотрим в следующем уроке. А пока — за домашку.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *