Чат на ASP: от простого к сложному. Часть
1
Автор: Олег Яцура
Ну что ж, чат у нас, можно сказать, уже работает. Существует окно ввода и окно
с фразами, можно писать в первом, что душа пожелает, и наблюдать начертанное во
втором. Ну просто верх творения ума человеческого. Но что-то как-то не совсем...
Для начала создадим "неполную" авторизацию пользователя. Для этого создаем
стартовую страницу чата (если таковой еще нет) примерно следующим образом:
<html>
<body>
<form method=post action=chat.asp name="mForm"
target="_top">
имя (Login): <input type=text name="userName" size=12>
<input type=submit value=" Ok ">
</form>
</body>
</html>
Далее мастерим сам chat.asp:
<frameset rows="*,68">
<frame src="chatbody.asp" name=bod scrolling="yes">
<frame src="chatinput.asp" name=menu scrolling="no">
</frameset>
Здесь мы, соответственно, создали два фрейма : chatbody.asp - фрейм с фразами,
chatinput.asp - фрейм с полем ввода.
Теперь добавим немного кода в chat.asp и создадим ту самую "неполную" авторизацию:
<%
Session("Login")=request("userName")
if Session("Login") = "" then
Session("Login") = "некто"
end if
if Session("dooropen")=0 then
Session("dooropen")=1
dim NewMess()
Redim NewMess(20)
messArray=Application("MessageArray")
for i=0 to 19
NewMess(i+1) = messArray(i)
next
NewMess(0)=Session("Login") & "снова с нами..."
Application.Lock
Application("MessageArray")=NewMess
Application.UnLock
end if
%>
И что же мы сделали? Всего навсего зверски выпытали у входящего пользователя
его имя и решили его запомнить хорошенько, заодно предупредив находящихся уже
в чате о его прибытии:
- получили данные из формы и сразу же занесли ее в Session-переменную Login
- на тот случай, если пользователь поленился вводить что-либо и просто жмакнул
кнопкой, обозвали его нектой (будет в будущем умнее)
- проверили посредством Session-переменной dooropen, зашел ли уже этот пользователь.
Если нет, то отмечаем сей факт опять же в Session-переменной dooropen присваивая
ей значение 1 и...
- уже по известной нам методике передачи новой фразы в общий массив данных (Application("MessageArray"))
производим в нем сдвиг вниз и записывем самой первой фразой извещение о прибытии
нового пользователя с сообщением его имени.
Для чего здесь служит Session-переменная dooropen? А вы попробуйте ее не использовать?
И тогда при каждом обновлении родительского окна, тоесть chat.asp будете получать
событие входа нового пользователя. Пока вся система еще только лишь во всеуслышанье
извещает о сим факте - ничего ужастного в этом, в принципе, и нет, а что будет
дальше? А вот при таком простом подходе один раз занесем значение единицы в Session-переменную
и, пока не будет уничтожена сессия, dooropen будет его хранить, не давая тем самым
ложных входов.
Стоит заметить, что в файле global.asa следует все же создать процедуру Session_OnStart
и указать в ней Session("dooropen") = 0, я бы еще посоветовал тут же конкретизировать
таймауты сессии ( Session.Timeout = 10 ), но сие не к спеху.
Ну, пожайлуй, для начала хватит. Разве что свериться кодами с chatinput.asp
(chatbody.asp, отвечающего за вывод фраз на экран пользователя) мы не планировали
изменять. У вас в chatinput.asp должно быть примерно следующее:
<form method=post action=chatinput.asp
target=_self name=mForm>
<Select Name=Type>
<Option Value=Phrase>сказать</option>
<Option Value=Action>сделать</option>
</Select>
<input type=text size=39 maxlength=255 name=mess>
<input type=submit value=" Ok ">
</form>
<%
If (Request("mess") <>"" then
Messa = Session("Login") & ": " & Request("mess")
if Request("Type")="Action" then
Messa="<i>" & Messa & "</i>"
end if
dim NewMess()
Redim NewMess(20)
messArray=Application("MessageArray")
for i=0 to 19
NewMess(i+1) = messArray(i)
next
NewMess(0)= Messa
Application.Lock
Application("MessageArray")=NewMess
Application.UnLock
end if
%>
Надеюсь, что данный код не столь уж и непонятен :-).
Продолжение
Информация взята с сайта www.relib.com