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
|