Персонализация пользовательских данных

advertisement
Персонализация пользовательских данных.
Автор: Пучкова Д.М.
План:
1. Основные понятия персонализации пользовательских данных.
2. Задачи, требующие хранения персонализованных данных пользователя между
сеансами работы в системе.
3. Планирование области хранения данных с учетом специфики сетевых приложений.
П.1. Основные понятия персонализации пользовательских данных.
Любой веб-разработчик стремится к повышению посещаемости своего веб-проекта. Даже
если сайт уже заполнен содержимым, имеет доски объявлений и функции поиска, имеется
много нераскрытых возможностей для работы над проектом. Как очевидно, разным людям
интересны разные страницы веб-проекта, и не существует единого способа быть идеальным
для всех.
В некоторых веб-приложениях может понабиться разрешить пользователям изменять или
персонализировать пользовательский интерфейс и поведение приложения. Набор элементов
управления веб-частей ASP.NET предоставляет эту возможность с помощью одной из
главных особенностей – персонализации. Персонализация позволяет сохранять свойства и
состояния элементов управления веб-частями в долговременное хранилище и не привязывать
данные свойства и состояния к определенному сеансу браузера.
Персонализация позволяет создавать свойства для элементов управления веб-частей, которые
имеют несколько уникальных характеристик. Настраиваемые свойства:
•
•
•
•
Привязанные к идентификации определенного пользователя или веб-страницы.
Параметры каждого пользователя для персонализируемых элементов управления на
каждой странице можно сохранять в персонализированные данные. Эти данные
позволяют пользователям изменять пользовательский интерфейс на веб-странице и
сохранять индивидуальные настройки.
Долговременные. Персонализированные параметры не привязаны к одному сеансу
браузера. Поскольку данные параметры сохраняются в долговременном хранилище,
параметры пользователя могут извлекаться приложением каждый раз при посещении
пользователем определенной страницы.
Для сохранения персонализированных данных используется база данных служб
приложения ASP.NET. Эта база данных по умолчанию автоматически создается
ASP.NET во вложенной папке «app_data» при первом использовании в ASP.NET
персонализации или одной из остальных служб приложения, таких как роли, членство
или профили. Также по умолчанию в ASP.NET создается база данных в виде одного
файла базы данных SQL Server, экспресс-выпуск, который содержит схему базы
данных для всех служб приложения. Используя файл Web.config, можно настроить
используемое приложение так, чтобы для персонализации создавался отдельный файл
базы данных. Кроме этого, в файле Web.config можно указать, чтобы данные служб
приложения сохранялись в базу данных SQL Server вместо того, чтобы по умолчанию
использовать для этого файл базы данных SQL Server, экспресс-выпуск.
Сохраненные на уровне поставщика. Механизм сохранения и извлечения
персонализированных данных состоит из компонента поставщика и хранилища
данных. ASP.NET включает поставщик Microsoft SQL по умолчанию и базу данных.
1
•
Можно также создать настраиваемый поставщик и настроить данный поставщик на
использование любого хранилища данных.
Объявленные в любом элементе управления веб-частей. При разработке
настраиваемого элемента управления можно добавить в код атрибут Personalizable,
чтобы включить определенное свойство в любой элемент управления веб-частей для
персонализации. Кроме настраиваемых элементов управления, производных от класса
WebPart, это также относится к серверным элементам управления ASP.NET,
настраиваемым серверным элементам управления или пользовательским элементам
управления, поскольку эти элементы управления могут использоваться как элементы
управления веб-частей.
При использовании персонализации с элементами управления веб-частей следует понимать
несколько базовых понятий, которые непосредственно касаются работы персонализации.
Первое базовое понятие – область персонализации. Область персонализации страницы – это
круг пользователей, к которым могут применяться изменения персонализации на странице. В
любое данное время веб-части страницы могут быть в одной из двух возможных областей
персонализации – «Shared» или «User». В области «Shared» любые изменения персонализации
на странице применяются ко всем пользователям, в области «User» изменения
персонализации на странице применяются только к текущему пользователю.
Второе, связанное с первым базовое понятие – видимость элемента управления. С помощью
видимости элемента управления определяется, является ли данный элемент управления
видимым для отдельных пользователей или для всех пользователей. Каждый элемент
управления WebPart на странице является либо общим элементом управления, который видим
всем пользователям данной страницы, либо элементом управления, который виден только для
отдельных пользователей. Видимость определяется тем, каким образом элемент управления
добавлен на страницу. Если элемент управления добавлен путем объявления его в разметке
веб-страницы (статический элемент управления), то этот элемент управления является общим
элементом управления. Если элемент управления добавлен кодом приложения или
пользователем посредством выбора этого элемента управления из перечня элементов
управления (динамический элемент управления), то видимость определяется текущей
областью персонализации страницы. Если страница находится в области «Shared», то
динамически добавленный элемент управления является общим, и если страница находятся в
области «User», элемент управления является индивидуально настраиваемым.
Третьим важным базовым понятием является область свойства. При создании
персонализируемого свойства в элементе управления с помощью атрибута Personalizable в
исходном коде можно установить область персонализации либо Shared, либо User (User
является областью персонализации по умолчанию). Это предоставляет детальный контроль
над теми свойствами в элементе управления, которые могут быть персонализированы всеми
пользователями и теми свойствами, которые могут быть персонализированы только
авторизованными пользователями, если областью страницы является Shared.
В целом эти базовые понятия области персонализации страницы, видимости элемента
управления и области персонализации свойства формируют диапазон параметров, которые
определяют, каким образом элементы управления веб-частей могут просматриваться и
персонализироваться пользователями.
П.2. Задачи, требующие хранения персонализованных данных пользователя между сеансами
работы в системе.
2
Далее мы рассмотрим задачу персонализации пользователей. Используя, в основном, PHP и
MySQL, создадим небольшой сайт, использующий cookie для определения тех пользователей,
которые ранее посетили сайт, и для настройки страницы под каждого пользователя.
Рассмотрим несложный пример заполнения и обработки деталей формы с занесением
информации в базу данных.
Для начала, создадим в базе данных project таблицу users:
CREATE TABLE users (login char(16) NOT NULL, password char(10) NOT NULL,
lastlogin date DEFAULT '0000-00-00' NOT NULL, news1 char(20), news2 char(20),
news3 char(20), PRIMARY KEY (login));
Далее займемся созданием непосредственно формы.
<HTML>
<HEAD>
<TITLE>Залогиньтесь!</TITLE>
</HEAD>
<BODY>
<br>Выберите заголовки, которые Вы хотели бы видеть!<br>
<form method=post action="newuser.php3">
<br>
Логин:<input name="login" type="TEXT" value="">
<br>
Пароль:<input name="password" type="TEXT" value="">
<br><br>
<br>News Choice 1:<SELECT NAME="news1" size=5 value="">
<option value="slashdot.lnk">Slashdot
<option value="freshmeat.lnk">Freshmeat
<option value="voodooextreme.lnk">VoodooExtreme
<option value="devshed.lnk">DevShed
<option value="bluesnews.lnk">Blue's News
</select>
<br>News Choice 2:<SELECT NAME="news2" size=5 value="">
<option value="slashdot.lnk">Slashdot
<option value="freshmeat.lnk">Freshmeat
<option value="voodooextreme.lnk">VoodooExtreme
<option value="devshed.lnk">DevShed
<option value="bluesnews.lnk">Blue's News
</select>
<br>News Choice 3:<SELECT NAME="news3" size=5 value="">
<option value="slashdot.lnk">Slashdot
<option value="freshmeat.lnk">Freshmeat
<option value="voodooextreme.lnk">VoodooExtreme
<option value="devshed.lnk">DevShed
<option value="bluesnews.lnk">Blue's News
</select>
<br><input type="submit" name="Submit" value="
Submit
<br></FORM>
</BODY>
</HTML>
">
Сценарий обработки формы: "newuser.php3". Когда в форму вводятся данные, этот
скрипт добавляет новый столбец в базу данных.
<? SetCookie("visitor",$login,time()+864000);
<HTML>
<HEAD><TITLE>Thanks!</TITLE></HEAD>
<BODY>
<?
3
?>
mysql_connect("localhost", "username", "pass") or DIE("Невозможно
подключиться к базе данных");
@mysql_select_db("project") or die("Невозможно выбрать базу данных.");
$result = mysql_query("Select * from users where login='$login'");
if(!mysql_numrows($result))
{
#создать новый логин
$result = mysql_query("insert into users values (
'$login','$password',NOW(),'$news1','$news2','$news3')");
?>
<br>
Спасибо, что зашли!<br><br>
Для того, чтобы увидеть, как выглядит Ваша страничка, зайдите по ссылке:
<a href="index.php3">назад</a>.
<?
}
else
{
printf(‘Этот логин уже занят.<br><br>’);
}
?>
</BODY>
</HTML>
Заметили ли Вы команду «setcookie» в начале скрипта? Далее мы поговорим о ней. Для
начала заметим, как средствами PHP бороться с созданием повторяющегося логина (10
строчек), а затем создается новый столбец (12 строчка). После этого дается ссылка на
начальную страницу. В конце скрипта пользователю выдается сообщение, если логин уже
занят.
Для того, чтобы передать переменные любому скрипту, необходимо их добавить в конец
URL, но то, что мы хотим – это менее сложное решение, без добавления записей в конец
URL. Нам необходимо передавать скриптовую информацию о пользователе. Самый простой
способ сделать это – используя cookie.
При помощи cookie можно довольно просто сохранять данные на пользовательском
компьютере и получать данные каждый раз при возвращении пользователя на страницу.
Будучи использованными с осторожностью, они не содержат конфиденциальных данных и
позволяют любому приложению интерактивно работать.
Для создания cookie на клиентском компьютере, можно использовать следующий код на
PHP:
setcookie(cookie name, value, expire time, string path, string domain, secure
flag);
Правилами применения данной функции являются следующие:
•
•
•
•
объявляется перед HTML-заголовком скрипта, т.к. он посылается как часть
заголовка;
возможно пропускать записи с «» и не закрывать теги;
установка «setcookie(cookie name)» или установка expire time=0 уничтожит
cookie из системы.
флаг безопасности 0 или 1, что указывает, должен ли cookie передаваться через
соединение SSL;
coookie
4
•
время истечения выражается в секундах и, как правило, определяется как time()
+число секунд, например, time()+86400, если время жизни cookie составляет 24
часа.
Значения, сохраняемые в cookie-файлах автоматически пересылаются сайту вместе с
заголовком. PHP автоматически декодирует это значение и присваивает его переменной,
чтобы впоследствии обращаться к ней на PHP. К примеру, возможно захватить cookie и
вывести его в форме страницы. Следующий скрипт берет определенный столбец из базы
данных и выводит его на страницу с соответствующими настройками.
<?
if ($visitor)
{
mysql_connect("localhost", "username", "pass")
or DIE("Unable to connect to database");
@mysql_select_db("project") or die("Unable to select database");
$result = mysql_query("select * from users where
login='$visitor'");
$row = mysql_fetch_array($result);
?>
<HTML>
<HEAD><TITLE>Добро пожаловать на заголовки!</TITLE>
</HEAD>
<BODY>
<H1><CENTER>Добро пожаловать <? printf($visitor); ?>!</CENTER></H1>
<br><br>
Текущие новости:<br>
<table> <tr>
<td><? include ("news/$row[news1]"); ?></td>
<td><? include ("news/$row[news2]"); ?></td>
<td><? include ("news/$row[news3]"); ?></td>
</tr>
</table>
<?
}
else
{
?>
<HTML>
<HEAD>
<TITLE>Залогиньтесь!</TITLE>
</HEAD>
<BODY>
<br>Выберите те заголовки, которые Вы хотели бы увидеть!<br>
<form method=post action="newuser.php3">
<br>
Логин:<input name="login" type="TEXT" value="">
<br>
Пароль:<input name="password" type="TEXT" value="">
<br><br>
<br>Выберите новость: <SELECT NAME="news3" size=5 value="">
<option value="slashdot.lnk">Slashdot
<option value="freshmeat.lnk">Freshmeat
<option value="voodooextreme.lnk">VoodooExtreme
<option value="devshed.lnk">DevShed
<option value="bluesnews.lnk">Blue's News
</select>
<br><input type="submit" name="Submit" value=" Submit ">
<br></FORM>
<?
}
5
?>
</BODY>
</HTML>
Скрипт выбирает между двумя возможностями: первая секция запускается, если у
пользователя установлен cookie-файл с персональными настройками под пользователя, и
используется для формирования страницы; вторая секция скрипта запускается, если cookie
не установлен. Если данную страницу сделать стартовой, то пользователи будет
автоматически переводиться на страницу, настроенную под них.
PHP осуществляет всю черновую работу по чтению заголовков, посылаемых от клиента и
записывающих cookie в переменную. Переменная $visitor получит значение true, если
cookie установлен. Другим путем проверки, установлен ли cookie, является применение
команды isset:
if (isset($visitor)){
Если переменная установлена, скрипт прочитывает ее значение, выбирает необходимый
столбец данных из базы данных и включает в код необходимые строчки.
Мы рассмотрели небольшой пример персонализации данных пользователя, используя PHP,
MySQL и cookie-файлы. Используя подобную технику программирования, возможно
получить доступ к базе данных и вывести необходимое поле. Такими методами пользуются
поисковики Yahoo или Excite для того, чтобы вывести наиболее посещаемые сайты на своих
веб-страницах, поиск новых сайтов продолжается непрерывно и постоянно обновляется.
П.3. Планирование области хранения данных с учетом специфики сетевых приложений.
Сервис персонализации предоставляет готовое решение для хранения персональных
параметров, задаваемых посетителями сайта. В настоящее время такие параметры обычно
хранят в cookie, в серверных базах данных или и там, и там. Независимо от того, где они
хранятся, ASP.NET 1.x мало чем помогает в этом случае. Приходится своими силами
создавать и настраивать серверное хранилище этих данных и получать данные
персонализации по именам пользователей, прошедших аутентификацию, по cookie или
каким-то другим способом.
Сервис персонализации ASP.NET 2.0 облегчает хранение и считывание персональных
параметров пользователей. Он основан на профилях пользователей. Профили определяются в
Web.config с помощью нового элемента <profile>. Ниже приведен фрагмент файла
Web.config:
<profile>
<properties>
<add name="Theme" />
<add name="Birthday" Type="System.DateTime" />
<add name="LoginCount" Type="System.Int32" defaultValue="0" />
</properties>
</profile>
В нем определен профиль, содержащий три свойства: Theme строкового типа, Birthday типа
DateTime и LoginCount целого типа. Последнее по умолчанию равно 0.
В период выполнения можно обращаться к этим свойствам текущего пользователя через
свойство Profile страницы, которое ссылается на экземпляр динамически
6
скомпилированного класса со свойствами, заданными в профиле. Например, следующие
операторы считывают значения свойств из профиля текущего пользователя:
string theme = Profile.Theme;
DateTime birthday = Profile.Birthday;
int logins = Profile.LoginCount;
Свойствам профиля можно присваивать значения:
Profile.Theme = "SmokeAndGlass";
Profile.Birthday = new DateTime (1959, 9, 30);
Profile.LoginCount = Profile.LoginCount + 1;
Очевидным преимуществом персонализации является строгая типизация. Еще одно
преимущество – то, что данные персонализации считываются и записываются по запросу.
Этим они отличаются от состояния сеанса, которое загружается и сохраняется при каждом
запросе независимо от того, используется оно или нет. Но, пожалуй, самое главное
преимущество сервиса персонализации – не нужно явно задавать, где хранятся данные
персонализации; система делает это за вас и хранит их постоянно. Когда эти данные
потребуются, к ним можно легко обратиться. В отличие от сеансов у профилей не истекает
время ожидания.
Так где же хранятся данные персонализации? Возможны варианты. Сервис персонализации
основан на провайдерах, поэтому его можно настроить на использование любого доступного
провайдера. В ASP.NET 2.0 войдут минимум два провайдера персонализации: для Access и
для SQL Server. Если не указано иное, сервис персонализации использует провайдер для
Access, по умолчанию хранящий данные персонализации локально в DataAspNetDB.mdb.
Вместо Access можно задействовать SQL Server, изменив Web.config вручную или через
Webadmin.axd. Если нет необходимости хранить данные персонализации ни в Access, ни в
SQL Server, можно написать свой провайдер.
По умолчанию ASP.NET использует в качестве ключа к данным персонализации имя
аутентифицированного пользователя, но можно настроить ASP.NET и на поддержку
персонализации для анонимных пользователей. Прежде всего, необходимо разрешить
анонимную идентификацию, добавив в Web.config:
<anonymousIdentification enabled="true" />
Затем добавить allowAnonymous="true" в свойства профиля, которые будут храниться для
анонимных пользователей:
<name="Theme" allowAnonymous="true" />
Теперь свойство Theme будет доступно как персональный параметр независимо от того,
прошли ли аутентификацию пользователи, которые обращаются к создаваемому сайту.
По умолчанию при анонимной идентификации, чтобы идентифицировать пользователей,
повторно посещающих сайт, используются cookie. С помощью атрибутов, указываемых в
<anonymousIdentification>, можно различными способами настроить эти cookie.
Например, задать имя cookie и указать, надо ли шифровать содержимое cookie. Или
настроить сервис персонализации на анонимную аутентификацию без cookie, при которой
для идентификации пользователя, повторно посещающего сайт, применяется передача
идентификатора сеанса через URL (URL munging). Предусмотрена даже возможность
7
автоматического определения: если выполняющий запрос браузер поддерживает cookie,
используются cookie, а в ином случае идентификатор сеанса передается в URL.
8
Литература.
1. И.В.Шапошников, PHP 5.1. Учебный курс. – СПб.: Питер, 2007. – 192 с.
2. В.Г.Олифер, Н.А.Олифер, Сетевые операционные системы: учебник для вузов, изд.
Питер, 2003.
3. www.microsoft.com
9
Related documents
Download