ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

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

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

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


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Сортировка, поиск и случайные числа. Часть Шестая.


22-05-2015

21.7. Случайные идентификаторы
Для того чтобы отслеживать, какое количество пользователей получают доступ к Web-узлу, вам потребуется присвоить им уникальные идентификаторы. Можно хранить любую информацию о данном пользователе в базе данных и передавать идентификатор со страницы на страницу с помощью ссылок или файлов cookie. Эти идентификаторы необходимо генерировать случайным образом; в противном случае под пользователя, имеющего право доступа, может замаскироваться любой желающий. К счастью, процесс создания случайных чисел несложен. Как он работает, показано в листинге 21.9. Задан набор символов, используемых для обозначения сеансов. В процессе создания идентификатора сеанса определенной длины символы выбираются случайным образом из списка. Этот идентификатор используется в ссылке, поэтому он будет передан на следующую страницу. Этот метод применили к любому браузеру, даже к браузеру Lynx. В главе 23, "Интеграция баз данных", обсуждается интеграция этого метода с базами данных.
Листинг 21.9. Генерирование идентификатора сеанса

<?php
// SessionID
// генерирует идентификатор сеанса function getSessionID($length=16)
{
// Задать набор допустимых символов $Pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $Pool .= "abcdefghijklmnopqrstuvwxyz"; $lastChar = strlen($Pool) - 1;
$sid = "";
for($i = 0; $i < $length;
{
$sid .= $Pool[mt_rand(0, $lastChar)];
}
return($sid);
}
// Задать генератору начальное значение mt_srand(100000000 * (double)microtime()); if(isset($_REQUEST['sid']))
{
print(" Идентификатор старого сеанса был {$_REQUEST['sid']}<br>n");
}
$sid = getSessionID();
print("<a href="{$_SERVER['PHP_SELF,]}?sid=$sid">"); print(" Получите новый идентификатор сеанса"); print("</a>n");
?>

 Здесь очень важно пользоваться случайными числами. Предположим, что для этого используются секунды и на протяжении целой секунды все идентификаторы сеанса будут одинаковы. А вероятность того, что на протяжении одной секунды к Web-узлу получат доступ много пользователей, очень высока. В листинге 21.8 для получения начального значения для генератора случайных чисел использовалось время в микро­секундах. Но даже в этом случае у нас будет определенное окно вероятности получения повторяющихся идентификаторов сеанса. Одним из способов обойти эту ситуацию является использование блокируемого ресурса, в котором будет храниться начальное значение, например в файле. Если один такой файл будет заблокирован, можно считать начальное значение и записать его в другой файл, и это даст полную гарантию того, что два параллельных процесса никогда не будут иметь одно и то же начальное значение. 

21.8. Выбор баннеров

Другой областью применения случайных чисел является выбор баннеров. Предположим, что у вашего Web-узла есть три спонсора. Каждый из них имеет по одному баннеру, которые будут поочередно демонстрироваться при доступе к Web-узлу. Для этого необходимо генерировать случайное число и поставить каждое число в соответствие определенному баннеру. В листинге 21.10 для вызова функции mt_rand использовался оператор switch. В таком случае о генерировании "хороших" начальных чисел беспокоиться не следует, необходимо лишь позаботиться о разумном распределении всех трех вариантов.

Сортировка, поиск и случайные числа

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Сортировка, поиск и случайные числа. Часть Пятая. PHP. Синтаксический анализ и обработка строк