Привет, Гость!
home login register
[+] Купить Рекламу
Хостинг для тебя! Заходи не пожалеешь
Что мы делаем полезного на официальном сайте WAP-поддержки? Подробно ...
Вступайте в нашу группу ВКОНТАКТЕ
Поздравляем, новичка с ID:1000
Как самомусделать QR-код
IT новости: в Windows новая опасная уязвимость
Проблемы восприятия IT
Как подтвердить авторство в Google

Учебник PHP #13
<< 1 2 3 4 5 ... 8 >>
uniqid( ) генерирует UIN из 23 символов. Чтобы быстро создать уникальный идентификатор, достаточно при вызове uniqid( ) передать один параметр — пустую строку:

$uniq_id = uniqid(" ");

// Генерируется строка из 13 символов - например. '39b3209ce8ef2'

В другом варианте сгенерированное значение присоединяется к строке, определяемой параметром префикс:

$uniq_id = uniqid("php", FALSE):

// Генерируется строка из 16 символов - например. 'php39b3209ce8ef2'

Поскольку uniqid( ) генерирует UIN на основании текущего времени, существует ничтожная вероятность того, что идентификатор удастся подобрать. Чтобы значение идентификатора было действительно случайным, можно предварительно сгенерировать префикс при помощи еще одной стандартной функции РНР, rand( ). Эта возможность продемонстрирована в следующем примере:

srand((double) microtime( ) * 1000000);

$uniq_id = uniqid(rand( ));

Функция srand( ) инициализирует («раскручивает») генератор случайных чисел. Если вы хотите, чтобы функция rand( ) генерировала действительно случайные числа, необходимо предварительно вызвать srand( ). Передача rand( ) в качестве параметра uniqid( ) приводит к тому, что функция uniqid( ) вызывается с заранее сгенерированным случайным префиксом, что усложняет подбор сгенерированного UIN.

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

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

Листинг 13.4. Процесс регистрации пользователя

<?

// Построить форму

$form = "

<form action=\"Listingl3-4.php\" method=\"post\">

<input type=\"hidden\" name=\"seenform\" value=\"y\"> \

Your first name?:<br>

<input type=\"text\" name=\"fname\" size=\"20\" maxlength=\"20\" value=\"\"><br>

Your email?:<br>

<input type=\"text\" name=\"email\" size=\"20\" maxlength=\"35\" value=\"\"><br>

<input type=\"submit\" value=\"Register!\">

</form>

// Если форма еще не отображалась

// и для данного пользователя еще не существует cookie...

1f ((! isset (Sseenform)) && (! isset ($userid))) :

print $form;

// Если форма отображалась.

// но данные пользователя еще не были обработаны...

elself (isset ($seenform) && (! isset ($sserid))) :

srand ((double) microtime( ) * 1000000);

$uniq_id = uniqid(rand( ));

// Подключиться к серверу MySQL и выбрать базу данных users

@mysql_pconnect("localhost", "root", "") or die("Could not connect to MySQL server!");

@mysql_select_db("book") or die("Could not select user database!");

// Объявить и выполнить запрос

$query = "INSERT INTO users13 VALUES('$uniq_id', '$fname', '$email')";

$result = mysql_query($query) or die("Could not insert user information!");

// Создать cookie "userid" со сроком действия один месяц, setcookie ("userid", $uniq_id, tirne( )+2592000);

print "Congratulations $fname! You are now registered! Your user information will be displayed uponon each subsequent visit to this page.";

// ... иначе, если cookie существует - использовать идентификатор

// пользователя для выборки данных из базы данных users elseif (isset($userid)) :

// Подключиться к серверу MySQL и выбрать базу данных users

@mysql_pconnect("localhost", "root", "") or die("Could not connect to MySQL server!");

@mysql_select_db("book") or die("Could not select user database!");

// Объявить и выполнить запрос

$query = "SELECT * FROM users,13 WHERE user_id = '$userid' ";

$result = mysql_query($query) or die("Could not extract user information!"

$row = mysql_fetch_array($result); print "Hi ".$row["fname"].",<br>";

print "Your email address is ".$row["email"];

endif;

?>

Обилие команд i f позволяет организовать весь процесс регистрации и последующую идентификацию пользователя в одном сценарии. Принципиально возможны три ситуации:

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

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

На этом завершается наше знакомство с применением cookie в РНР. Если вы захотите побольше узнать о механизме cookie, обратитесь к ресурсам Интернета, перечисленным в следующем разделе.

Ссылки по теме

Дополнительную информацию о cookie и их использовании можно найти в специализированных web-pecypcax:

http://www.cookiecentral.com/;
http://home.netscape.com/newsr ... html;
http://builder.com/Programming ... html;
http://www.w3.org/Protocols/rf ... c2100.

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

Отслеживание сеанса

Сеансом (session) называется период времени, который начинается с момента прихода пользователя на сайт и завершается, когда пользователь покидает сайт. В течение сеанса часто возникает необходимость в сохранении различных переменных, которые бы «сопровождали» пользователя при перемещениях на сайте, чтобы вам не приходилось вручную кодировать многочисленные скрытые поля или переменные, присоединяемые к URL.

Рассмотрим следующую ситуацию. При входе на сайт пользователю присваивается уникальный идентификатор сеанса (SID), который сохраняется на компьютере пользователя в cookie с именем PHPSESSJD. Если использование cookie запрещено или cookie вообще не поддерживаются, SID автоматически присоединяется ко всем локальным URL на протяжении сеанса. В то же время на сервере сохраняется файл, имя которого совпадает с SID. По мере того как пользователь
Комментарии (0)
<< 1 2 3 4 5 ... 8 >>
Скачать Java книгу

»php/mysql/pdo/js
В библиотеку

На главную

Сообщество wap разработчиков I HwapCMS официальный сайт поддержки


RSS-лента
Генерация: 0.0081 сек.