〓Введение〓
Любой, у кого есть здравый смысл, знает, что использовать ASP для выполнения этой функции явно надуманно, потому что это не обмен мгновенными сообщениями, такой как чаты QQ, MSN или IRC. Все они полагаются на обновление веб-страницы для изменения времени последней активности. чтобы узнать, находится ли пользователь в сети. Так что не ждите, что следующее руководство будет идеальным. Я просто записал свой образ мышления. Если что-то не так, обратитесь за советом к экспертам!
-------------------------------------------------- ----------------------------------
〓Текст〓
Прежде всего, позвольте мне представить вам мою идею достижения этого эффекта. Если вы поняли мою идею, вам не нужно читать эту статью...
Я могу придумать только два способа реализации этой функции:
1. база данных+asp
Возможно, это будет сложнее сделать, но подойдет для систем с большим количеством залогиненных пользователей.
2. приложение
Используйте объект приложения: если вы создаете большое сообщество, вам, возможно, придется создать приложение для каждого идентификатора входа. Хотя конструкция программы будет проще, вошедших в систему пользователей слишком много, и это никогда не будет потреблять ресурсы сервера. Защитите это здесь, потому что объект приложения легко создать, когда пользователь входит в систему, но он должен быть полностью освобожден, когда пользователь выходит из системы. До сих пор я не видел лучшего метода ~.
Итак, давайте посмотрим, как использовать базу данных + asp, чтобы решить проблему, заключающуюся в том, что одна и та же учетная запись не может войти в систему одновременно!
Сначала попросите пользователя создать базу данных. Здесь мы используем доступ для создания нового файла onlyNet118.mdb.
Таблица данных 1: пользователи хранят регистрационную информацию пользователя.
Настроены следующие таблицы данных: uID (автоматический номер) userName (тип символа) userPass (тип символа)
Таблица данных 2: onlyLogin хранит информацию о временном входе пользователя.
Настроены следующие таблицы данных: OLname (тип символа) OLtime (тип даты) OLip (тип символа)
После того, как база данных построена, мы вручную добавляем данные в таблицу пользователей, добавляем Net118 в таблицу userName и добавляем 111 в таблицу userPass. Чтобы выделить фокус нашего обсуждения в этой статье и убрать ненужную ерунду, пароль. не должно быть зашифровано, а имя пользователя должно быть собственным. Добавить~ха-ха~.
Хорошо, теперь в базе данных есть база данных пользователей. Давайте создадим интерфейс входа пользователя. Скопируйте следующий код и сохраните его в файл onlyLogin.asp.
<html>
<голова>
<meta http-equiv=Content-Type content=text/html charset=gb2312>
<title>Net118.COM запрещает одновременный вход в одну и ту же учетную запись из разных регионов</title>
</голова>
<тело>
<имя формы=метод form1=post action=loginPost.asp>
Имя пользователя: <input name=userName type=text id=userName size=15 maxlength=5>
Пароль: <входное имя=тип userPass=идентификатор пароля=размер userPass=15 максимальная длина=15>
<тип ввода=имя отправки=Отправить значение=Логин>
</форма>
</тело>
</html>
После завершения создайте новый файл loginCONN.asp, скопируйте приведенный ниже код и сохраните его! Это связано с базой данных. Я не буду много объяснять...
<%
Тусклый CONN_Net118
Тусклый конн_Т
Тусклый ммдд
ммдд=onlyNet118.mdb
Установите CONN_Net118 = Server.CreateObject(ADODB.Connection)
Conn_T=Provider=Microsoft.Jet.OLEDB.4.0;Источник данных= & Server.MapPath(&mmdd&)
при ошибке продолжить дальше
CONN_Net118.Открыть Conn_T
%>
Далее мы создаем файл loginPost.asp, который также существует в этом каталоге. Это более важно. Посмотрите внимательно на следующий код:
<!--#include file=loginCONN.asp -->
<%
'Удалить пользователей, активных в течение времени maxTime, maxTime определено в файле loginCONN.asp
Conn_Net118.Execute (Удалить из onlyLogin, где DATEDIFF('s',OLtime, now()) > & maxTime & )
'============================================== = ===============
Dim rs, ts, txt, sql, имя пользователя, userPass
если Request.Form(Submit)=Войти тогда
userName=Request.Form(userName)'Получить имя пользователя формы
userPass=Request.Form(userPass)' Получить пароль для входа в форму пользователя
«Поскольку мы не обсуждаем здесь вопросы безопасности, пароли пользователей не шифруются.
Установите rs = Server.CreateObject(ADODB.RECORDSET)
sql=SELECT * FROM пользователей, где userName = ' & userName & ' и userPass = ' & userPass & '
rs.Open sql, CONN_Net118,1,1
ЕСЛИ не rs.eof тогда
Call isOK(userName) ' Вызовите этот процесс, если имя пользователя и пароль верны, isOK будет настроен в следующей программе.
еще
Response.Write(<a href=javascript:history.go(-1)>Неверное имя пользователя или пароль</a>)
Ответ.Конец()
конец, если
rs.Close
Установить rs=Ничего
конец, если
Sub isOK(имя пользователя)
Dim Olip 'IP-адрес, сохраненный под текущим именем пользователя в базе данных.
Dim Oltime ' Время последнего обновления веб-страницы, когда текущее имя пользователя для входа сохраняется в базе данных, является важными данными для расчета того, находится ли пользователь в сети.
Dim OLip1 'Запишите IP-адрес входа текущего пользователя, чтобы определить, является ли это тот же пользователь.
OLip1=Request.ServerVariables(REMOTE_ADDR)'Получите IP-адрес пользователя, который предоставил данные для входа.
Установить ts=Conn_Net118.execute (выбрать * FROM onlyLogin WHERE OLname='&userName&')
если не ts.eof, то ' Запросить базу данных, чтобы узнать, есть ли какая-либо информация для входа в систему для этого пользователя
OLtime=ts(OLtime)
OLip=ts(OLip)
если OLip1<>OLip и DateDiff(s,OLtime,now()) < maxTime, то
'Предыдущее предложение определяет, не является ли отправленный IP-адрес пользователя для входа последним записанным IP-адресом пользователя в базе данных и
'Если разница между временем последней активности пользователя и текущим временем не превышает заданное количество секунд, подтверждается, что пользователь в данный момент находится онлайн.
Response.Write <a href=javascript:history.go(-1)>Этот пользователь в настоящее время онлайн. Вы не можете войти в эту учетную запись из других мест! </а>
Ответ.Конец()
еще
«В противном случае будет определено, что вход в систему прошел успешно, и в сеанс будет выплачена стоимость.
Сеанс (lgName) = имя пользователя
Сеанс (lgPass) = userPass
Response.Redirect loginOK.asp
Ответ.Конец
конец, если
еще
'Если в базе данных нет записи пользователя для входа, выполните следующий оператор
Дим лс
Установите ls=Server.CreateObject(ADODB.RECORDSET)
ls.OpenSelect * From onlyLogin,CONN_Net118,2,2
ls.ADDNEW
ls(OLname)=имя пользователя
ls(OLip)=OLip1
лс(OLtime)=СЕЙЧАС()
ls.ОБНОВЛЕНИЕ
ls.Close
Установить ls=Ничего
'Определить успешный вход в систему и оплатить сеанс
Сеанс (lgName) = имя пользователя
Сеанс (lgPass) = userPass
Response.Redirect loginOK.asp
Ответ.Конец
конец, если
Конец подзаголовка %>
Если вы понимаете файлы asp, вы сразу поймете, что после успешного входа в систему лист перейдет на loginOK.asp. Давайте сразу посмотрим на код этого листа.
<тип стиля=текст/css>
<!--
body {цвет фона: #FF9900;}
-->
</стиль>
<% IF Session(lgName)<> затем %>
Вы успешно вошли в систему! ! ! Ниже приведен iframe, который проникает на веб-страницу, чтобы обновить веб-страницу в указанное время и сообщить серверу, находитесь ли вы в сети.
Чтобы облегчить различие, мы используем белый цвет в качестве цвета фона веб-страницы фрейма.
<iframe border=0 name=new_datemarginwidth=0framespacing=0marginheight=0 src=loginFrame.asp
Frameborder=0 noResize width=100 прокрутка=нет высоты=30 vspale=0></iframe>
<% еще %>
Вы не вошли в систему. Добро пожаловать в информационную сеть для веб-мастеров: http://www.Net118.com
<% конец, если %>
Если вы осторожный человек, вы сразу поймете, что дальше нам нужно сделать loginFrame.asp.
<!--#include file=loginCONN.ASP -->
<% CONN_Net118.Execute(Update onlyLogin Set OLtime='& NOW() & ' где OLname = ' & Session(lgName) & ') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%>; url=></head></html>;
Итак, наша программа завершена. Ключом к этой программе является определение того, находится ли пользователь в сети, и у меня нет другого выбора, кроме как использовать FRAME для вложения ключевого листа, который регулярно обновляется, чтобы определить, находится ли пользователь в сети, в листе. Здесь в реальной работе можно изменить ширину и высоту iframe на 0, чтобы его не видели обычные пользователи, или сделать цвет фона веб-страницы основной программы таким же, как у основной программы. вложенную регулярно обновляемую веб-страницу, и все будет в порядке.
Не так давно я видел кого-то на дискуссионном форуме, который сказал, что это можно определить с помощью таких вещей, как сеансы и файлы cookie. Это, очевидно, невозможно, поскольку объекты, которые они генерируют, работают только над собой, и их содержимое не может быть передано другим пользователям. все. Приложение должно быть еще одним способом достижения этой цели, но я отказался от этой идеи, когда подумал, что если в систему одновременно входит много пользователей, для каждого пользователя будет сгенерировано как минимум от одного до трех объектов приложения, потому что тогда наш исходный плохой сервер, обязательно отключат~