Содержание
Delphi for PHP: сессии

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

Немного изменяем обработку проверки пароля на форме unit1, добавляя запись данных пользователя в массив $_SESSION.

                 //должна быть только одна такая запись
                 if ($this->Query1->readRecordCount()==1)
                 {

                   //задаем параметры сессии
                   session_start();
                   $_SESSION['username']=$this->Query1->name;
                   $_SESSION['userpass']=$this->Query1->pass;

                   //перенаправляем пользователя на нужную страницу
                   header('Location:unit2.php');
                   exit();

                 }
                 else
                 {
                   $this->Label3->Caption="Вход в систему - не выполнен";
                 }

На форму unit2 добавляем компоненты Database и Query (можно скопировать из первой формы) и пишем обработку для события OnBeforeShow, где по данным, полученным из массива $_SESSION пробуем получить запись из таблицы users. Если число полученных записей равно 1, то открываем для пользователя таблицу goods. Если пользователя с таким именем и паролем в базе нет, направляем его на страницу ввода пароля.

               function Unit2BeforeShow($sender, $params)
               {

                 //устанавливаем соединение
                 $this->Database1->Open();

                 //устанавливаем кодировку запросов
                 $sql="SET NAMES cp1251";
                 $this->Query1->SQL=$sql;
                 $this->Query1->LimitStart='-1';
                 $this->Query1->LimitCount='-1';
                 $this->Query1->Open();
                 $this->Query1->Close();

                 //выполняем запрос, проверяя, есть ли имя и пароль из сессии в базе
                 $sql="select id, name, pass from `test`.`users` where name='" . $_SESSION['username'] . "'" .
                      " and pass='" . $_SESSION['userpass'] . "'";
                 $this->Query1->SQL=$sql;
                 $this->Query1->LimitStart='0';
                 $this->Query1->LimitCount='10';
                 $this->Query1->Open();

                 //должна быть только одна такая запись
                 if ($this->Query1->readRecordCount()==1)
                 {

                   //закрываем проверочное соединение
                   $this->Query1->Close();
                   $this->Database1->Close();

                   //показываем таблицу товаров
                   if ($this->tbgoods1->Active=true) {$this->tbgoods1->Close();}
                   if ($this->dbtest1->Connected=true) {$this->dbtest1->Close();}
                   $this->dbtest1->Open();
                   $this->tbgoods1->Open();

                 }
                 else
                 {

                   //закрываем проверочное соединение
                   $this->Query1->Close();
                   $this->Database1->Close();

                   //закрываем сессию и перенаправляем пользователя на страницу ввода пароля
                   session_destroy();
                   header('Location:unit1.php');
                   exit();
                 }

               }

Ну и для того, чтобы после окончания работы пользователя сессия не оставалась открытой, разместим на форме unit2 кнопку Выход и для события OnClick напишем обработку закрытия сессии.

               function Button1Click($sender, $params)
               {

                 //закрываем сессию и перенаправляем пользователя на страницу ввода пароля
                 session_destroy();
                 header('Location:unit1.php');
                 exit();

               }

Аутентификацию можно выполнить с использованием компонента BasicAuthentication, расположенного в разделе System палитры компонентов Tool Palette. Для этого надо разместить компонент на форму и написать обработку события OnAuthenticate, возвращающего результат проверки. После этого в событии формы OnBeforeShow вызывается метод BasicAuthentication->Execute(), который проверяет, прошел ли пользователь аутентификацию. Если не прошел, появляется довольно невзрачное окошко ввода имени-пароля. Если прошел, то открывается сессия и пользователь допускается к содержимому формы.

Полезные ссылки:
http://www.phpfaq.ru/sessions
http://www.softtime.ru/bookphp/gl8_1.php
http://www.realcoding.net/article/view/4483

Содержание

© re-stichka.narod.ru
При публикации данного материала ссылка на источник обязательна.

Hosted by uCoz