Warning: include(/cryptographp.fct.php): failed to open stream: No such file or directory in /backup/web_server/sites/softodon.com/www/article.php on line 5 Warning: include(): Failed opening '/cryptographp.fct.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /backup/web_server/sites/softodon.com/www/article.php on line 5 Сессии PHP - теория
Меню в данный момент недоступно
Категории статей
Сессии PHP - теория

Самое главное с PHP сессиях это идентификатор сессии. Именно по идентификатору сессии сервер может отличать одного клиента от другого и на основе этого выводить для каждого пользователя индивидуальную информацию. Идентификатор сессии передается от страницы к странице не изменяя своего значения (для одного клиента) на протяжении всего сеанса общения клиента с сервером. Идентификатор сессии это тот параметр который сервер получает от клиента. Если сервер не получит идентификатор сессии от клиента, то он не сможет его идентифицировать. Идентификатор сессии храниться у клиента в участке памяти браузера, так называемый cookie. Именно в cookie хранится идентификатор сессии. Именно оттуда он постоянно запрашивается сервером у клиента при запросе страницы последнего у первого. Если у клиента отключены cookie и он отказывается хранить у себя в памяти данные, выдаваемые для него сервером (идентификатор сессии), то сервер (узнавая об этом от клиента) пытается передавать этот идентификатор другим способом, через ссылки. Т.е. он все равно отдает (на хранение) идентификатор сессии клиенту только хранится он не в cookie а в адресной строке (что тоже является клиентской памятью). Т.е. к каждой внутренней ссылке сайта (которые не начинаются с протоколов) при построении страницы PHP движок дописывает идентификатор сессии, что бы патом получить его от клиента в дальнейших запросах – это для GET запросах (адресная строка). Для POST запросов (через формы) PHP дописывает к каждой форме скрытое поля, которое содержит идентификатор сессии. Таким образом PHP пытается передавать от страницы к странице идентификатор сессии.  Все данные персональные данные на сервере хранятся в супер глобальном массиве $_SESSION и привязываются к идентификатору сессии. У каждой сессии есть свое время жизни, после которого она удаляется. Таким образом «таскать» данные для каждого конкретного клиента при переходе со страницы к странице можно либо в супер глобальном массиве $_SESSION (на сервере создаются временные файлы сессий, которые содержат данные массива SESSION), таким образом все данные будут на сервере, либо в памяти браузера клиента cookie. Хранить данные в cookie не безопасно т.к. клиент их может посмотреть, а так же их могут перехватить (если используется незащищенный протокол) при передачи на сервер. Таким образом пароли для заполнения форм лежат в cookie браузера при автоматическом заполнении форм.

Механизм сессий можно легко сделать самому. При загрузке страницы генерировать случайное число и записывать его в базу, а так же в cookie клиенту. После авторизации пользователя дописать в базе к этому идентификатору (который у него) настоящий id пользователя  в системе. Таким образом при каждой новой загрузке страницы пользователем, надо будет спрашивать у него идентификатор (который лежит у него в cookie) и искать в базе идентификатор пользователя, который связан с этим идентификатором сессии. Если при запросе из cookie идентификатора сессии пользователь ничего не дал, значит он зашел в первый раз и надо выдать ему идентификатор сессии, в обратном случае новый идентификатор выдавать не нужно. Так же необходимо задавать время жизни у него идентификатора. С дописыванием идентификатора сессии к внутренним ссылкам (в случае выключенных у клиента cookie) все гораздо сложнее. Придется по сути писать всю страницу заново и к каждой внутренней ссылке добавлять переменную идентификатора сессии. И к каждой форме добавлять скрытое поле с идентификатором сессии. Так же патом надо будет переписывать обработчиков форм и обычные страницы т.к. они будут принимать по GET еще и идентификатор сессии. Так же для удобства и красоты надо будет настраивать mod_rewrite (для Apache) или подобный модуль для обработки входящих запросов. В общем как вы поняли встроенный механизм сессий в PHP значительно облегчает жизнь.

КатегорияWeb разработка
РазделASP, PHP, Perl, CGI
Просмотров586
Дата добавления2012-06-01 15:54:53
Очков13
Проголосовавших5
Средний балл2
Автор0



Рейтинг: 2 из 5 (голосов: 5)

Написать отзыв к статье


Fatal error: Call to undefined function dsp_crypt() in /backup/web_server/sites/softodon.com/www/article.php on line 110