ASP как зеркало информационной революции, или создай интерактивный сайт за полчаса

MoZ (real_moz@hotmail.com)

Спецвыпуск Xakep, номер #015, стр. 015-094-4


Файло раз

<!--

edit.asp

Самая сложная часть нашего чата. По сути совмещает в себе две страницы - логина и отправки сообщений.

При этом все формы сабмитятся на одну и ту же страницу, и она сама определяет необходимые действия

-->

<html>

<body>

<%

'Записываем в локальную переменную UserName значение из формы.

'Метод Server.HTMLEncode - небольшая страховка от мелких пакостей в виде скриптов, введенных в форме.

UserName = Server.HTMLEncode(Request.Form("UserName"))

if Session("UserName")="" And UserName = "" then

' Если имени пользователя нет в сессионной переменной, и оно не передано из формы

' - то отображаем форму для ввода имени пользователя.

%>

<form action="edit.html" method="post">Ваше имя: 

<input type="Text" name="UserName"> 

'Забацали поле для ввода.

<input type="Submit" value="Войти в чат">

'Сварганили кнопу "Войти в чат".

</form>

<%

else

if Session("UserName")="" then

'Если имени пользователя нет в сессионной переменной, но оно не передано из формы, то записываем имя пользователя в сессионную переменную UserName и добавляем его в список всех пользователей чата.

Application.Lock

'Поскольку переменные приложения общие для всех пользователей, перед их изменением необходимо выполнить метод Lock. Таким образом, в один момент времени эти переменные может менять только один пользователь.

Application("UsersList") = Application("UsersList") & UserName & "<br>"

Application.Unlock 'Освобождаем переменные приложения.

Session("UserName") = UserName

'Для записи сессионных переменных никакие блокировки не нужны, поскольку эти переменные принадлежат только одному пользователю.

end if

'А теперь идет часть для отправки сообщений.

Message = Request.Form("message")

'Если мы получили поле message из формы - добавляем сообщение в чат.

if Message<>"" then

AllChat = Application("chat")

'Здесь у нас происходит удаление старых сообщений чата. Если общий размер чата превышает 3000 символов, то мы обрезаем его до ближайшего сообщения, которое мы находим по тегу <br>

if Len(AllChat)>3000 then

AllChat=left(AllChat,instr(3000,AllChat,"<br>")+3)

end if

'А вот и непосредственное добавление в нашу главную переменную сообщения с именем пользователя и временем.

Application.Lock

Application("chat") = "<i>" & Time &"</i> <b>" & Session("UserName") & "</b>: " & _

Server.HTMLEncode(Message) & "<br>" & AllChat

Application.Unlock

end if

'А теперь выводим обычную форму для отправки сообщений.

%>

<form action="edit.html" method="post">

Назад на стр. 015-094-3  Содержание  Вперед на стр. 015-094-5