이 기능을 구현하는 방법에는 두 가지가 있습니다.
1. 애플리케이션
애플리케이션 개체 사용: 대규모 커뮤니티를 구축하는 경우 각 로그인 ID에 대한 애플리케이션을 생성해야 할 수 있습니다. 프로그램 설계는 더 간단해지지만 로그인한 사용자가 너무 많아 서버 리소스를 소비하게 됩니다. 여기서는 권장하지 않습니다. 애플리케이션 객체는 사용자가 로그인할 때 생성하기 쉽지만, 사용자가 시스템에서 로그아웃할 때 완전히 해제하려면 아직까지 이보다 더 좋은 방법을 본 적이 없습니다~
<%
.....사용자 이름 사용자 이름 가져오기.....
ifApplication(사용자 이름)<>then
response.write사용자가 이미 로그인되어 있습니다.
응답.끝
엔디프
Application(username)=username''은 사용자의 사용자 이름을 저장합니다.
%>
전역 파일에 sessiononend 이벤트를 추가하고 오프라인인 경우 Application(isuserlogin)=false를 추가합니다.
또한, 스레드가 행잉(Hang)되었는지 여부를 감지하는 데 필요한 것이 있는데, 이는 서버 객체의 특정 항목이다.
(참고: http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=815)
2. 데이터베이스+ASP
수행하기가 더 복잡할 수 있지만 로그인한 사용자 수가 많은 시스템에 적합합니다.
먼저 사용자를 위한 데이터베이스를 생성합니다. 액세스를 사용하여 새로운 onlyTOL8.mdb를 생성합니다.
데이터 표 1: 사용자는 사용자 등록 정보를 저장합니다.
다음과 같은 데이터 테이블이 설정됩니다. uID(자동 번호) userName(문자 유형) userPass(문자 유형)
데이터 표 2: onlyLogin은 사용자 임시 로그인 정보를 저장합니다.
다음과 같은 데이터 테이블이 설정됩니다. OLname(문자 유형) OLtime(날짜 유형) OLip(문자 유형)
데이터베이스가 구축된 후 사용자 테이블에 데이터를 수동으로 추가하고, userName 테이블에 TOL8을 추가하고, userPass 테이블에 111을 추가합니다.
다음으로, 다음 코드를 복사하여 onlyLogin.asp 파일에 저장합니다.
<html>
<머리>
<meta http-equiv=Content-Type content=text/html; charset=gb2312>
<title>동시에 다른 지역에서 동일한 계정으로 로그인하는 것은 금지되어 있습니다</title>
</head>
<본문>
<양식 이름=form1 방법=포스트 작업=loginPost.asp>
사용자 이름: <입력 이름=userName 유형=텍스트 id=userName 크기=15 최대 길이=5>
비밀번호: <입력 이름=userPass 유형=비밀번호 id=userPass 크기=15 최대 길이=15>
<입력 유형=제출 이름=제출 값=로그인>
</form>
</body>
</html>
완료 후 새 loginCONN.asp 파일을 생성하고 다음 코드를 복사한 후 저장하여 데이터베이스에 연결합니다.
<%
희미한 CONN_TOL8
딤콘_T
희미한 mmdd
mmdd=onlyTOL8.mdb
CONN_TOL8 = Server.CreateObject(ADODB.Connection) 설정
Conn_T=공급자=Microsoft.Jet.OLEDB.4.0;데이터 원본= & Server.MapPath(&mmdd&)
오류 발생 시 다음 재개
CONN_TOL8.Conn_T %> 열기
다음으로, 이 디렉터리에도 존재하는 loginPost.asp 파일을 만듭니다. 이것이 핵심입니다. 다음 코드를 주의 깊게 살펴보십시오.
<!--#include 파일=loginCONN.asp -->
<%
''maxTime 시간 내에 활성 사용자를 삭제합니다. maxTime은 loginCONN.asp 파일에 정의되어 있습니다.
Conn_TOL8.Execute(DATEDIFF(''s'',OLtime, now()) > & maxTime & )의 onlyLogin에서 삭제
''=============================================== ================
Dim rs, ts, txt, sql, userName, userPass
Request.Form(Submit)=로그인인 경우
userName=Request.Form(userName)'' 양식 사용자 로그인 이름 가져오기
userPass=Request.Form(userPass)'' 양식 사용자 로그인 비밀번호 가져오기
''여기서는 보안 문제를 논의하는 것이 아니기 때문에 사용자 비밀번호는 암호화되지 않습니다.
rs = Server.CreateObject(ADODB.RECORDSET) 설정
sql=SELECT * userName = '' & userName & '' 및 userPass = '' & userPass & ''인 FROM 사용자
rs.SQL 열기, CONN_TOL8,1,1
rs.eof가 아닌 경우
isOK(userName) 호출 '' 사용자 이름과 비밀번호가 정확하면 이 프로세스를 호출하면 다음 프로그램에서 사용자 정의됩니다.
또 다른
Response.Write(<a href=javascript:history.go(-1)>잘못된 사용자 이름 또는 비밀번호</a>)
응답.끝()
종료하면
RS.닫기
rs=아무것도 설정하지 않음
종료하면
하위 확인(사용자 이름)
Dim Olip '' 현재 로그인 사용자 이름으로 데이터베이스에 저장된 IP
Dim Oltime '' 현재 로그인 사용자 이름이 데이터베이스에 저장될 때 웹 페이지를 마지막으로 새로 고친 시간은 사용자가 온라인 상태인지 여부를 계산하는 중요한 데이터입니다.
Dim OLip1 ''은 현재 사용자의 로그인 IP를 기록하여 동일한 사용자인지 구별하는 데 사용됩니다.
OLip1=Request.ServerVariables(REMOTE_ADDR)''로그인 정보를 제출한 사용자의 IP를 가져옵니다.
ts=Conn_TOL8.execute 설정(* FROM onlyLogin WHERE OLname=''& userName & '' 선택)
ts.eof가 아니면 '' 데이터베이스에 쿼리하여 이 사용자에 대한 로그인 정보가 있는지 확인합니다.
OL시간=ts(OL시간)
OLip=ts(OLip)
if OLip1<>OLip 및 DateDiff(s,OLtime,now()) < maxTime then
''이전 문장은 제출된 로그인 사용자 IP가 데이터베이스에 마지막으로 기록된 사용자 IP가 아닌지 확인하고
''사용자의 마지막 활동 시간과 현재 시간의 차이가 지정된 시간(초)을 초과하지 않으면 사용자가 현재 온라인 상태인 것으로 확인됩니다.
Response.Write <a href=javascript:history.go(-1)>이 사용자는 현재 온라인 상태입니다. 다른 곳에서는 이 계정에 로그인할 수 없습니다! </a>
응답.끝()
또 다른
'' 그렇지 않으면 로그인이 성공한 것으로 판단하고 해당 값을 세션에 지급합니다.
세션(lgName)=사용자 이름
세션(lgPass)=userPass
응답.로그인 리디렉션OK.asp
응답.종료
종료하면
또 다른
''데이터베이스에 로그인 사용자 기록이 없으면 다음 명령문을 실행합니다.
희미한 것
ls=Server.CreateObject(ADODB.RECORDSET)를 설정합니다.
ls.OpenSelect * onlyLogin,CONN_TOL8,2,2에서
ls.새로 추가
ls(OLname)=사용자 이름
ls(OLip)=OLip1
ls(OLtime)=지금()
ls.업데이트
ls.닫기
ls=아무것도 설정하지 않음
''로그인이 성공했는지 확인하고 세션에 값을 지불합니다.
세션(lgName)=사용자 이름
세션(lgPass)=userPass
응답.로그인 리디렉션OK.asp
응답.종료
종료하면
하위 종료 %>
로그인에 성공하면 페이지가 loginOK.asp로 이동합니다.
<스타일 유형=텍스트/css>
<!--
본문 {배경색: #FF9900;}
-->
</style>
<% IF 세션(lgName)<> 다음 %>
성공적으로 로그인되었습니다! ! ! 다음은 지정된 시간에 웹 페이지를 새로 고치고 온라인 상태인지 서버에 보고하기 위해 웹 페이지에 몰래 들어가는 iframe입니다.
구분을 용이하게 하기 위해 프레임 웹 페이지의 배경색을 흰색으로 사용합니다.
<iframe 테두리=0 이름=new_date marginwidth=0 프레임 간격=0 marginheight=0 src=loginFrame.asp
Frameborder=0 noResize 너비=100 scrolling=no height=30 vspale=0></iframe>
<% 그 외 %>
로그인되어 있지 않습니다.
<%는 %인 경우 종료>
다음으로 할 일은 loginFrame.asp입니다.
<!--#include 파일=loginCONN.ASP -->
<% CONN_TOL8.Execute(Update onlyLogin Set OLtime=''& NOW() & '' where OLname = '' & Session(lgName) & '') %>
<html><head><meta http-equiv=refresh content=<%=(maxTime-5)%> url=></head></html>
이 시점에서 프로그램이 완료됩니다. 이 프로그램의 핵심은 사용자가 온라인 상태인지 확인하는 것입니다.