Java Web QQ 로그인 기능 구현 한 계정 같은 시간에 한 사람만 로그인 가능

5253 단어 javawebqq로그인
한 계정이 같은 시간에 한 사람만 로그인할 수 있는 방법은 다음과 같다.
1. 사용자가 로그인할 때 ArrayList에 사용자 추가
2. 다시 로그인할 때 ArrayList에 해당 사용자가 있는지 확인하고, ArrayList에 해당 사용자가 이미 있는 경우 해당 사용자의 로그인을 차단합니다.
3. 사용자가 종료할 때 이 ArrayList에서 이 사용자를 삭제해야 한다. 이것은 세 가지 상황으로 나뉜다.
① 로그아웃 버튼을 사용하여 정상적으로 종료
② 브라우저 닫기 버튼을 클릭하거나 Alt + F4를 사용하여 종료하면 JavaScript를 사용하여 페이지 닫기 이벤트를 캡처할 수 있습니다.
ArrayList에서 사용자를 제거하는 Java 방법 실행
③ 비정상적인 종료, 예를 들어 클라이언트 시스템이 붕괴되거나 갑작스럽게 다운되면 일정 시간 동안 세션이 활동하지 않으면 세션에 대응하는 사용자를 삭제하여 해결할 수 있다. 그러면 사용자는 일정 시간 기다린 후에 정상적으로 로그인할 수 있다.
LoginAction에서 정의:

//  
public static List logonAccounts;
login () 로그인 방법:

//  session 30 
request.getSession().setMaxInactiveInterval(60*30);
if(logonAccounts==null){
logonAccounts = new ArrayList();
}
//  ArrayList 
for (int i = 0; i < logonAccounts.size(); i++) {
Account existAccount = (Account)logonAccounts.get(i);
if(account.getAccountId().equals(existAccount.getAccountId())){
return "denied";
}
}
//  , sessionId account 
//   ③  sessionId 
account.setSessionId(request.getSession().getId());
//  ArrayList 
logonAccounts.add(account);
return "login";
① 로그아웃 버튼을 사용하여 정상적으로 종료
logout () 종료 방법:

if(logonAccounts==null){
logonAccounts = new ArrayList();
}
//  ArrayList  ⑴
for (int i = 0; i < logonAccounts.size(); i++) {
Account existAccount = (Account)logonAccounts.get(i);
if(account.getAccountId().equals(existAccount.getAccountId())){
logonAccounts.remove(account);
}
}
② 브라우저 닫기 버튼을 클릭하거나 Alt + F4로 종료합니다.
백그라운드에서 창을 팝업하고 팝업 창에서 ArrayList의 사용자를 삭제합니다.

function window.onbeforeunload(){
//  Alt+F4 
//  onbeforeunload , if 
if (event.clientX>document.body.clientWidth && event.clientY<0||event.altKey){
window.open('accountUnbound.jsp','',
'height=0,width=0,top=10000,left=10000');
}
}
accountUnbound.jsp: 팝업 창에서 ArrayList 사용자 제거

<%
Account account = (Account) request.getSession().getAttribute("account");
if(account != null){
if(LoginAction.logonAccounts==null){
LoginAction.logonAccounts = new ArrayList();
}
//  ArrayList ――  ⑴  
for (int i = 0; i < logonAccounts.size(); i++) {
Account existAccount = (Account)logonAccounts.get(i);
if(account.getAccountId().equals(existAccount.getAccountId())){
logonAccounts.remove(account);
}
}
}
%>
위 코드가 실행될 수 있도록 3초 후에 이 팝업 창을 닫습니다 (accountUnbound.jsp에도 있습니다)

<script>
setTimeout("closeWindow();",3000);
function closeWindow(){
window.close();
}
</script>
③ LoginAction으로 implements HttpSessionListener를 구현하고 sessionCreated, sessionDestroyed 방법을 구현하며 sessionDestroyed에서 ArrayList의 사용자를 삭제합니다(사용자가 30분 이상 활동하지 않으면 이 방법을 실행합니다).

public void sessionDestroyed(HttpSessionEvent event) {
//  sessionId, logonAccounts 
String sessionId = event.getSession().getId();
for (int i = 0; i < logonAccounts.size(); i++) {
Account existAccount = (Account)logonAccounts.get(i);
if(account.getSessionId().equals(existAccount.getSessionId())){
logonAccounts.remove(account);
}
}
}
주:
위의 경우 팝업 창이 방화벽이나 보안 소프트웨어에 가로막혀 팝업 창이 표시되지 않아 짧은 시간 동안 로그인할 수 없습니다. 이 경우 팝업 창 대신 AJAX를 사용할 수 있습니다. 마찬가지로 백그라운드에서 사용자의 코드를 삭제하지만 방화벽의 제한을 받지 않습니다.

<script>
// <![CDATA[
var http_request = false;
function makeRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, true);
http_request.send(null);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
window.close();
} else {
alert('There was a problem with the request.');
}
}
}
function window. onbeforeunload() {
makeRequest ('accountUnbound.jsp');
}
//]]>
</script>
위의 이 aax 코드에 대해 인터넷에서 상세한 설명이 많습니다. 이것을 onbeforeunload () 브라우저 닫기 이벤트에 추가하면 백그라운드에서 코드를 실행하는 효과가 좋습니다. 팝업 창이 때때로 무효가 될까 봐 걱정하지 마십시오.
이 코드를 사용하면 위 ②에서 accountUnbound.jsp의 팝업 창을 닫습니다.close();js 코드는 필요 없어요.
위에서 말한 것은 여러분에게 소개된 Java Web이 QQ 로그인 기능을 실현하는 것입니다. 한 계정은 같은 시간에 한 사람만 로그인할 수 있습니다. 여러분에게 도움이 되었으면 합니다. 만약에 궁금한 점이 있으면 저에게 메시지를 남겨 주시면 제때에 답장해 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기