×
Закрытие
×

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

  • Создаем сайт для работы в Интернете

    1. Причины создания пошаговой инструкции по разработке самописного сайта
    2. Тема создаваемого сайта
    3. В чем будет заключаться монетизация
    4. Функционал
    5. Этапы создания
    6. Текущее состояние создаваемого сайта

    Здравствуйте уважаемый посетитель!

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

    Причем чтобы такой сайт был создан не в стандартном исполнении на основе какой-нибудь бесплатной СMS, а заточенный под себя, с возможностью обеспечить ему должную безопасность и реализовать все свои индивидуальные потребности.

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

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

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

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

Самописный сайт своими руками!

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние самописного сайта, который создается для работы в Интернете в рамках цикла статей Как сделать сайт.

Где в дополнительных материалах можно бесплатно скачать исходные файлы сайта с таблицами MySQL.

Вы здесь: Главная → Сборник статей → Авторизация  → Авторизация пользователя в PHP


Автор: / Дата:

Авторизация пользователя в PHP

Здравствуйте уважаемый посетитель!

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

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

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

Данная статья представляет собой вводную часть нового радела "Авторизация пользователей", в котором предполагается рассмотреть все основные вопросы, связанные с созданием на сайте полноценного механизма авторизации.

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

Содержание


  • Зачем нужны сессии и cookies
  • Использование сессий и cookies в механизме авторизации
  • Как узнать текущие настройки PHP
  • Как изменить параметры настроек сессий
  • Где хранятся файлы сессий и как посмотреть их содержимое
  • Как посмотреть данные cookies
  • Исходные файлы сайта

Зачем нужны сессии и cookies


В нашем варианте при построении системы авторизации будем использовать так называемые PHP-сессии (session). Которые по существу представляют собой способы хранения информации на сервере в виде уникальных для каждого пользователя переменных.

Кроме того потребуется использование и других данных, находящихся в так называемых файлах "cookies" (куки). Представляющие небольшие фрагменты, отправляемые веб-сервером, и предназначенные для хранения в браузере пользователя.

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

С чем нам прийдется работать, мы определили - это сессии и cookies. А теперь попробуем ответить на вопрос, а зачем они нужны для авторизации и можно ли обойтись без них.

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

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

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

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

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

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

И в таком случае посетителю не потребуется при очередных загрузках страниц повторно отправлять форму со своим логином и паролем. Так как вся необходимая для авторизации информация будет находиться в файлах сессий на сервере и в сохраненных данных cookies браузера.

А для того, чтобы все это работало должным образом, необходимо при использовании сессий и cookies обеспечить необходимое взаимодействие между сервером и браузером.

Использование сессий и cookies в механизме авторизации


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

При этом для каждого пользователя предусмотрено использование необходимых для авторизации данных, сохраняемых в глобальных переменных массива $_SESSION.

И что важно, эти данные доступны при каждом последующем обращении пользователя с возможностью записи/чтения значений логина и пароля (возможно использование и других переменных).

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

В любом случае при запуске сессии формируется уникальный идентификатор, состоящий из случайного 32-ух значного шестнадцатеричного числа, к примеру: "a6kms4aussieqv4daa78i5a9qm3t988h". При этом для хранения данных сессии на сервере создается файл, имя которого соответствует идентификатору с добавлением префикса "sess_". Для вышеуказанного идентификатора, имя файла будет иметь следующий вид: "sess_a6kms4aussieqv4daa78i5a9qm3t988h".

Кроме этого сервер должен передать, а браузер увидеть и сохранить этот идентификатор у себя в сессионной cookie с именем "PHPSESSID". Это имя по умолчанию определяется директивой "session.name" конфигурационного файла "php.ini". При желании имя можно изменить (позднее посмотрим как это можно сделать).

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

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

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

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

А сейчас посмотрим как можно узнать о текущих настройках PHP, определяющих основные параметры сессий и cookies.

Как узнать текущие настройки PHP


Очевидно, что для того, чтобы полноценно работать с сессиями и файлами cookies, необходимо иметь информацию об их текущих настройках. Поэтому в этой части мы попробуем выяснить относящиеся к ним настройки конфигурации PHP.

Узнать это можно разными способами. В первую очередь мы посмотрим, как это можно сделать с помощью функции phpinfo(). Которая предназначена для вывода информации о текущей конфигурации. И обычно используется в для проверки настроек конфигурации и для просмотра доступных предопределенных констант в системе.

Данный способ хорош тем, что позволяет в достаточно удобном для просмотра табличном виде вывести в окне браузера полную информацию о текущем состоянии PHP, включая информацию о настройках компиляции PHP, о расширениях, о версии, информацию о сервере и среде выполнения, окружении PHP, версии ОС, о путях, об основных и локальных значениях настроек конфигурации, о HTTP заголовках и лицензии PHP.

Для этого достаточно создать отдельный файл, например с именем info.php, разместив его в корне сайта, и записать в него всего лишь одну строку кода.

  1. <?php

  2. phpinfo();

  3. ?>

Рис.1 Функция для определения текущей конфигурации PHP

И теперь, если в браузере ввести домен сайта с указанием в адресе наименования этого файла, например для сайта "newsite.local": newsite.local/info.php, то должна отобразиться страница с полной информацией о конфигурации PHP.

На следующем скриншоте показан фрагмент конфигурации с интересующими нас настройкам расширения "session" для сайта "newsite.local".

Фрагмент конфигурации PHP с настройками раздела session

Рис.2 Фрагмент конфигурации PHP с настройками раздела session

Следует обратить внимание, что в этой таблице имеется две колонки - Master Value и Local Valu, в которых указываются следующие значения параметров:

  • Master Value - указывается те значения, которые записаны в конфигурационном файле php.ini, и применяются при запуске PHP в соответствии с установленными директивами;
  • Local Value - отображается текущее значение, которое определяется с учетом применения любых переопределений, произведенных либо через директивы файла .htaccess дополнительной конфигурации веб-сервера Apache, распространяющиеся на все страницы соответствующего домена, либо с помощью вызовов PHP-функций, устанавливающих нужные настройки при выполнении определенных скриптов.

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

скриншот 43

Обзор настроек конфигурации PHP в части управления сессиями

Рис.3 Обзор настроек конфигурации PHP в части управления сессиями

Первый вариант вывода информации о конфигурации PHP мы посмотрели. А теперь ту же самую информацию получим другим способом, использовав для этого функцию ini_get_all(). С помощью которой можно вывести все настройки конфигурации в виде ассоциативного массива с именами директив в качестве ключей.

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

Если потребуется, можно выводить не все настройки, а только их часть, указав в параметре функции нужное расширение. В данном случае нас интересует расширение session.

  1. <?php

  2. //Вывод конфигурации PHP в виде ассоциативного массива

  3. $ini = ini_get_all('session');

  4. print_r($ini);

  5. ?>

Рис.4 PHP-код вывода конфигурации PHP в виде ассоциативного массива

Теперь, разместим данный код в каком-нибудь месте на сайте. Например, создадим для этого новый файл с именем ini.php (аналогично тому, как мы это делали ранее с файлом info.php).

После чего, отправив запрос в браузере к этому файлу (для сайта "newsite.local" это будет newsite.local/ini.php), можно получить нужные настройки конфигурации.

В данном случае будут показаны только позиции, соответствующие указанному в параметре функции ini_get_all() расширению session.

Вывод конфигурации PHP в виде ассоциативного массива

Рис.5 Вывод конфигурации PHP в виде ассоциативного массива

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

Два из них: глобальное значение для установки (global_value) и локальное значение (local_value) мы ранее уже касались. А вот третий (access), так называемый код доступа - это числовая константа в виде битовой маски представляет место, где значение директивы можно изменить. Иными словами, этот параметр определяет режим, где и когда директива PHP может или не может быть установлена.

К примеру, некоторые настройки могут быть установлены только на системном уровне в файле php.ini, другие - с помощью файла .htaccess дополнительной конфигурации веб-сервера Apache. А есть и те, которые можно менять и с помощью PHP-скрипта, использующего для этого определенные функции, например ini_set().

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

Маска Режим Место установки настроек
1 PHP_INI_USER Значение может быть установлено в пользовательских скриптах (с помощью ini_set())
2 PHP_INI_PERDIR Значение может быть установлено в php.ini, .htaccess
4 PHP_INI_SYSTEM Значение может быть установлено в php.ini
7 PHP_INI_ALL Значение может быть установлено отовсюду

Рис.6 Соответствие значений access к режимам установки параметров конфигурации

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

А для того, чтобы представить возвращенные функцией ini_get_all() значения конфигурации PHP в более удобный для использования вид, расположив каждую директиву в отдельную строку, можно воспользоваться другим способом вывода данных массива, применив для этого цикл обработки массивов foreach().

  1. <?php

  2. //Вывод массива значений конфигурации PHP с помощью функции foreach()

  3. $ini = ini_get_all('session');

  4. foreach ($ini as $name => $value) {

  5. echo $name.": global_value (".$value['global_value']."), local_value (".$value['local_value']."), access (".$value['access'].")<br>";

  6. }

  7. ?>

Рис.7 PHP-код вывода массива значений конфигурации PHP с помощью функции foreach()

Здесь помощью функции foreach() при переборе всех элементов массива на каждой итерации текущему элементу в виде переменной $name, присваивается соответствующее значение переменной $value (поз.4).

И таким образом выполняя по каждому элементу массива вывод значений по его ключам (global_value, local_value и access) с переводом строки "<br>" при каждом выполнении конструкции echo (поз.5), можно получить значения конфигурации в виде столбца, как показано на следующем скриншоте.

Вывод конфигурации PHP с помощью функции foreach()

Рис.8 Вывод массива значений конфигурации PHP с помощью функции foreach()

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

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

скриншот 44

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

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

  1. <?php

  2. //Вывод текущего значения настройки конфигурации с помощью функции ini_get()

  3. $ini_name = 'session.gc_maxlifetime';

  4. $ini_one = ini_get($ini_name);

  5. echo $ini_name.": ".$ini_one."<br><br>";

  6. ?>

Рис.9 PHP-код вывода текущего значения настройки конфигурации с помощью функции ini_get()

Здесь в качестве примера для вывода текущего значения используется имя настройки конфигурации 'session.gc_maxlifetime', соответствующее времени жизни сессии (поз.3). Для того, чтобы получить текущее значение по любой другой директории, необходимо указать соответствующее имя установки.

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

Ниже показан пример получения текущей информации для конкретно заданной установки, в данном случае для 'session.gc_maxlifetime'.

Пример получения текущего значения для конкретной установки

Рис.10 Пример получения текущего значения для конкретной установки

Если сравнить результат с теми значениями, которые были получены для директории 'session.gc_maxlifetime' в предыдущих вариантах, то можно отметить, что все они отражают одинаковое текущее значение времени жизни сессии, установленное по умолчанию, равное 1440 секунд.

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

Как изменить параметры настроек сессий


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

Ведь не всегда настройки по умолчанию могут удовлетворять необходимым требованиям тех или иных элементов системы. И нередко приходится в их работу вносить свои коррективы, не меняя при этом общие настройки конфигурации PHP на сервере. Тем более, что прямой доступ к файлу php.ini на действующем хостинге обычно ограничен или вообще отсутствует.

В данном случае рассмотрим установку параметров, относящихся к сессиям с помощью файла .htaccess дополнительной конфигурации веб-сервера Apache. А затем посмотрим, как это можно делать используя PHP-функции. (В конфигурационном файле php.ini настройки, относящиеся к сессиям присутствуют в расширении "session".)

Сначала рассмотрим установку значений конфигурации с помощью файла .htaccess. Для этого в конфигурационных файлах .htaccess предусмотрены следующие директивы:

  • php_flag - устанавливает логические значения (да/нет);
  • php_value - устанавливает строковые и числовые значения.

Синтаксис директив очень прост:

  1. php_flag имя директивы on | off

  2. php_value имя директивы VALUE

Рис.10 Синтаксис директив файла .htaccess

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

А теперь с помощью директивы файла .htaccess изменим некоторые настройки конфигурации. Например, заменим используемое в наименовании сессионной cookie название сессии с "PHPSESSID" на "SESSID".

Кроме того изменим еще один параметр, относящийся к сессионной cookie, который в значительной степени влияет на безопасность при работе с сессиями. Речь идет об установке session.cookie_httponly, которая во включенном состоянии (значение 1) обеспечивает доступ к cookies только через HTTP протокол, запрещая доступ через скриптовые языки, такие как JavaScript. И тем самым позволяет эффективно защищать сессии от так называемых XSS атак межсайтового скриптинга (тип атаки, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода, исполняемого на стороне клиента).

Директивы .htaccess для этих установок будут иметь следующий вид.

  1. # Настройки параметров сессий

  2. php_value session.name SESSID

  3. php_flag session.cookie_httponly 1

Рис.11 Пример директив файла .htaccess

Добавим этот код в .htaccess и выведем полученный результат одним из возможных способов, скажем, через файл info.php.

Результат изменения настройки конфигурации с помощью .htaccess

Рис.12 Результат изменения настроек конфигурации с помощью .htaccess

Здесь видно, имя файла сессионной cookie изменилось на "SESSID", а ее параметр session.cookie_httponly принял значение "1". А так как файл .htaccess находится в корневом каталоге сайта, то эти изменения будут действовать на все его директории.

А теперь для изменения настроек конфигурации воспользуемся PHP-функцией. Для этого применим функцию ini_set(), которая позволяет изменять значения различных настроек во время выполнения скрипта. При этом после завершения работы скрипта ранее измененные настройки возвращается к исходному состоянию.

Для того, чтобы проверить такой вариант, разместим в начале файла ini.php следующий код, предусматривающий изменение значения установки 'session.gc_maxlifetime', определяющей время жизни сессии, с 1440 секунд (24 минуты) на новое значение в 900 секунд (15 минут).

  1. <?php

  2. //Изменение настройки конфигурации с помощью функции ini_set()

  3. ini_set('session.gc_maxlifetime', 900);

  4. ?>

Рис.13 Пример изменения настройки конфигурации с помощью PHP-функции

После этого выведем значения настроек конфигурации, применив для этого один из способов, который мы уже использовали в предыдущем разделе (рис.7,8). А, именно: с использованием функции ini_get_all() и цикла обработки массивов foreach().

Результат изменения настройки конфигурации с помощью PHP-функции

Рис.14 Результат изменения настройки конфигурации с помощью PHP-функции

Кстати, если обратить внимание на установки 'session.name' и 'session.cookie_httponly', то можно заметить, их текущее состояние соответствует тем значением, которые мы установили ранее с помощью директив файла .htaccess. Что подтверждает, что изменения настроек конфигурации, выполненные с помощью .htaccess, действуют на все директории каталога, в котором он размещен.

Функция ini_set() не единственная, которая используется для установки значений конфигурации при работе с сессиями, есть и другие. Например, для установки значений cookies применяется функция setcookie(), с помощью которой можно устанавливать все основные параметры любой заданной cookie. Далее при создании системы авторизации мы не раз будем ее использовать.

Где хранятся файлы сессий и как посмотреть их содержимое


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

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

На следующем скриншоте показан фрагмент конфигурации PHP веб-сервер Open Server с настройками, определяющими путь к каталогу сессий.

Фрагмент конфигурации PHP с настройками по параметру session.save_path

Рис.15 Фрагмент конфигурации PHP с настройками по параметру session.save_path

Как видно, в веб-сервере Open Server для хранения сессий определен путь /ospanel/userdata/temp/. Если открыть в этой директории папку "temp", то можно будет увидеть сессии, которые в это время в нем находятся (конечно, если они там есть).

Каталог сессий temp с текущими сессиями на веб-сервере Open Server

Рис.16 Каталог сессий temp с текущими сессиями на веб-сервере Open Server

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

Посмотреть же содержимое файлов сессий достаточно просто. Для этого можно воспользоваться любым текстовым редактором. Ниже показан пример содержимого одного из файлов сессии, открытом в текстовом редакторе Nodepad++.

Просмотр содержимого файла сессии с помощью текстового редактора

Рис.17 Просмотр содержимого файла сессии с помощью текстового редактора

Как видно, в этом файле сессии находится одна переменная с именем "key1" с длиной строки в 64 символа. Являющаяся в данном случае ключом, используемым в качестве дополнительной меры для защиты конфиденциальности сессии.

Второй способ вывода данных сессий - это извлечение PHP-переменных из массива. Так как все данные сессии располагаются в ассоциативном массиве $_SESSION, то получить их можно указав в индексе имя переменной $_SESSION['name'] (для данного примера имя "key1").

Применив же к этому массиву функцию print_r($_SESSION) можно вывести все имеющиеся в сессии переменные. Ниже показан пример получения данных сессии через переменные массива $_SESSION.

Пример получения данных сессии через переменные массива $_SESSION

Рис.18 Пример получения данных сессии через переменные массива $_SESSION

Если сравнить полученный результат, то он полностью совпадает с вариантом вывода содержимого файла сессии с помощью текстового редактора (рис.17). Правда, несколько в измененном виде.

Как посмотреть данные cookies


В отличие от сессий, файлы cookies находятся на клиентском устройстве. Но их можно получать и на стороне сервера, используя для этого также переменные массива. Только в этом случае массив будет с другим именем $_COOKIE.

Ниже показан пример вывода переменных массива $_COOKIE с помощью функции print_r($_COOKIE).

Пример получения данных cookies через переменные массива $_COOKIE

Рис.19 Пример получения данных cookies через переменные массива $_COOKIE

Как видно, здесь имеется две переменных. Первая с именем "SESSID" предназначена для хранения идентификатора сессии, а вторая, с именем "key1" имеет то же значение, что и одноименная переменная сессии.

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

  1. <script>

  2. alert(document.cookie);

  3. <script>

Рис.20 Код для вывода cookies на клиентской стороне с использованием JavaScript

И если после этого открыть страницу с этим кодом, то в диалоговом окне браузера можно будет увидеть cookies, относящиеся к этому сайту, как показано на скриншоте.

Результат вывода cookies на клиентской стороне с помощью JavaScript

Рис.21 Результат вывода cookies на клиентской стороне с помощью JavaScript

В данном случае, в отличие от предыдущего примера, мы видим отображение только одной cookie с именем "key1". При этом сессионная cookie отсутствует.

Обусловлено это тем, что ранее в целях безопасности с помощью добавления в файл .htaccess директивы "php_flag session.cookie_httponly" со значением "1" мы специально заблокировали возможность вывода сессионной cookie через клиентские языки.

Если же из .htaccess эту директиву удалить, или присвоить такой настройке значение "0", то сессионная cookie должна появиться.

Результат на клиентской стороне без запрета вывода сессионной cookie

Рис.22 Результат на клиентской стороне без запрета вывода сессионной cookie

Данный пример наглядно показывает важность включения установки session.cookie_httponly для обеспечения безопасности сессий. Ведь в таком режиме хакеру сложно будет узнать идентификатор сессии. А значит и возможности для его грязных дел в этом случае существенно уменьшаются.

Что касается остальных cookies, то при желании доступ к ним на клиентской стороне можно также запретить, применив функцию setcookie() с соответствующими параметрами. При создании системы авторизации мы это тоже будем использовать.


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

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

С уважением, Николай Гришин


Комментарии


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

Буду Вам за это очень признателен!

comments powered by HyperComments