Для учетной записи, которая может войти только в одного человека одновременно, она может быть достигнута следующим методом:
1. Добавьте пользователя в ArrayList, когда пользователь входит в систему
2. При снова везде в систему, проверьте, есть ли пользователь в ArrayList. Если пользователь уже существует в ArrayList, он будет заблокирован от входа в систему.
3. Когда пользователь выходит, пользователь должен быть удален из ArrayList, который разделен на три ситуации
① Используйте кнопку «Выход», чтобы нормально выходить
② Нажмите кнопку «Закрыть браузер» или используйте Alt+F4, чтобы выйти, и вы можете использовать JavaScript, чтобы захватить событие Clay Page.
Выполните метод Java, чтобы удалить пользователей в ArrayList
③ Необычный вход, такой как сбой или внезапный сбой в клиентской системе, вы можете использовать пользователя, соответствующего сеансу для удаления сеанса, если сеанс не активен время от времени, чтобы пользователь должен был дождаться некоторое время, прежде чем входить в систему нормально.
Определено в логине:
// используется для хранения всех учетных записей, введенных в систему в общедоступном статическом списке на стороне сервера;
Login () Метод входа в систему:
// Установите время бездействия сеанса на 30 минут request.getSession (). SetMaxInativeInterval (60*30); if (logonaccounts == null) {logonaccounts = new ArrayList ();} // Проверьте, есть ли какой -либо пользователь в ArrayList для (int i = 0; i <logonaccounts.size (); (Учетная запись) logonaccounts.get (i); if (account.getAccountId (). equals (eavenaccount.getAccountid ())) {return "denied";}} // Когда пользователь входит в систему, добавьте SessionId в объект учетной записи // позже ③ вам необходимо удалить соответствующую пользовательскую учетную запись. logonaccounts.add (учетная запись); вернуть "вход";① Используйте кнопку «Выход», чтобы нормально выходить
Mogout () Метод выхода:
if (logonaccounts == null) {logonaccounts = new ArrayList ();} // Удалить пользователя в ArrayList ⑴ for (int i = 0; i <logonaccounts.size (); i ++) {account aeplyAccount = (учетная запись) logonaccounts.get (i); if (account.getAccountid (). equals (exivityAccount.getAccountid ())) {logonaccounts.remove (account);}}② Нажмите кнопку «Закрыть браузер» или используйте Alt+F4, чтобы выйти:
В заднем плане появляется окно, удаляет пользователя в ArrayList во всплывающем окне
Function window.onbeforeUnload () {// Будь то выйти через кнопку «Закрыть» или использовать Alt+F4 // Если событие OnbeForeUnload запускается для обновления, следующее оператор не выполняет if (event.clientx> document.clientwidth && event.clienty <0 || event.altkey) {window.open ('accountunbound.jsp', '', 'height = 0, width = 0, top = 10000, слева = 10000');}}AccountUnbound.jsp: Удалить пользователя в ArrayList во всплывающем окне
<%Account account = (account) request.getSession (). GetAttribute ("account"); if (account! = Null) {if (loginAction.logonaccounts == null) {loginAction.logonaccounts = new ArrayList ();} // Удалить пользователь в ArrayList - следующий код является тем же, что и в ⑴ ⑴ watrize (int i = 0; i ++) {account aepplyAccount = (account) logonAccounts.get (i); if (account.getAccountid (). equals (eavenaccount.getaccountid ())) {logonaccounts.remove (account);}}%>Чтобы убедиться, что приведенный выше код может быть выполнен, закройте это всплывающее окно через 3 секунды (также расположено в accountunbound.jsp)
<Script> setTimeout ("closeWindow ();", 3000); function closeWindow () {window.close ();} </script>③ Сделайте внедрение входа в систему реализации httpsessionListener и реализовать методы сеанса и сеанса. Удалить пользователей в ArrayList в SessionDestroyed (если пользователь неактивен в течение более 30 минут, этот метод будет выполнен)
public void sessionDestroyed (httpsessionEvent event) {// Получить сеанс, когда неактивен, и удалить пользователя в соответствующем входном системе строки sessionId = event.getSession (). getId (); for (int i = 0; i <logonaccounts.size (); i ++) {account aeplyAccount = (account) logonAccounts.get (i); if (account.getSessionId (). evalls (eavenaccount.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 xmlhtprequest (); (http_request.overridemimeType) {http_request.overridemimeType ('text/xml');}} else if (window.activexobject) {// ietr {http_request = new ActiveXobject ("microsoft.xmlhttp");} catch (e) {}}} if (! http_request) {alert ('ravid up upe :( не может создать xmlhttp exance'); return false;} http_request.onsleteChange = alertContents; http_request.open ('get', url, true); http_request.send (null);} function alertContents () {if (http_request.readyState == 4) {if (http_request.status = 200) {winwind.cles (); QUEST. ');}}} Окно функции Есть много подробных объяснений для приведенного выше кода Ajax в Интернете. Добавление его в браузер OnbeForeUnload () Close будет работать очень хорошо в фоновом режиме, поэтому нет необходимости беспокоиться о проблеме, что всплывающие окна иногда будут недействительными.
После использования этого кода код JS в accountunbound.jsp в вышеупомянутом ② закрывает окно всплывающего окна .close (); больше не нужно.
Выше приведено в реализации Web Java функции входа в систему QQ, которую редактор представляет вам. Одна учетная запись может войти только в одного человека одновременно. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!