Para uma conta que só pode fazer login em uma pessoa ao mesmo tempo, ela pode ser alcançada pelo seguinte método:
1. Adicione o usuário a uma lista de Array quando o usuário faz login
2. Ao fazer login novamente, verifique se há algum usuário no ArrayList. Se o usuário já existir no ArrayList, ele será impedido de fazer login.
3. Quando o usuário sai, o usuário precisa ser excluído da ArrayList, que é dividido em três situações
① Use o botão de logout para sair normalmente
② Clique no botão Fechar o navegador ou use o Alt+F4 para sair, e você pode usar o JavaScript para capturar o evento de fechamento da página.
Execute um método Java para excluir usuários no ArrayList
③ Logout incomum, como uma falha ou falha repentina no sistema do cliente, você pode usar o usuário correspondente à sessão para excluir a sessão se a sessão não estiver ativa de vez em quando, para que o usuário precise esperar um tempo antes de fazer login normalmente.
Definido no LoginAction:
// usado para armazenar todas as contas conectadas no lado do servidor Public Static List LogonAccounts;
Método de login login ():
// Defina o tempo de inatividade da sessão como 30 minutos solicitações.getSession (). SetmaxinActiveInterval (60*30); if (logonAccounts == NULL) {logonAccounts = new ArrayList ();} // Verifique se existe algum usuário no ArrayList para (Int I = 0; i <goNAccount.s.Size (); (Conta) logonaccounts.get (i); if (account.getAccountId (). Iguals (existuckount.getAccountId ())) {return "negado";}} // Quando o usuário efetua login, adicione sessionID a um objeto de conta // posterior ③ você precisa excluir o usuário do usuário. retornar "login";① Use o botão de logout para sair normalmente
Método de saída de logout ():
if (logonAccounts == NULL) {logonAccounts = new ArrayList ();} // exclua o usuário no ArrayList ⑴ para (int i = 0; i <logonAccounts.size (); i ++) {conta existaccount = (conta) logonaccounts.get (i); if (conta.getAccountId (). Iguals (existaccount.getAccountId ())) {logonaccounts.remove (conta);}}② Clique no botão Fechar do navegador ou use Alt+F4 para sair:
Uma janela aparece em segundo plano, exclui o usuário no ArrayList na janela pop-up
function window.onbeforeUnload () {// Se você deve sair do botão Fechar ou usar alt+f4 // se o evento OnBeforeUnload for acionado para atualizar, o seguinte se declarar se não executar se (event.clientx> document.body.clientWidth && event.clienty <0 || event.altkey) {window.open ('AccountUnbound.jsp', '', 'altura = 0, largura = 0, topo = 10000, esquerda = 10000');}}AccountUnbound.jsp: Exclua o usuário no ArrayList na janela pop-up
<%Da conta = (conta) request.getSession (). GetAttribute ("conta"); if (conta! i ++) {conta existaccount = (conta) logonaccounts.get (i); if (conta.getAccountId (). Iguals (existaccount.getAccountId ())) {logonaccounts.remove (conta);}}}%>Para garantir que o código acima possa ser executado, feche esta janela pop-up após 3 segundos (também localizada no AccountUnbound.jsp)
<Script> setTimeout ("CloseWindow ();", 3000); function closeWindow () {window.close ();} </sCript>③ Faça o LoginAction implementa os métodos HTTPSessionListener e implemente os métodos de sessionCreated e SessionDestroyed. Exclua usuários no ArrayList no SessionDestroyed (se o usuário estiver inativo por mais de 30 minutos, esse método será executado)
public void sessionDestroyed (evento httpsessionEvent) {// obtém o sessionID quando inativo e exclua o usuário no logonaccounts correspondente sessionId = event.getSession (). getId (); for (int i = 0; i <logonaccounts.size (); i ++) {conta existaccount = (conta) logonaccounts.get (i); if (conta.getSessionId (). Equals (existaccount.getSessionId ())) {logonaccounts.remove (conta);}}}Observação:
Para o exposto, como a janela pop-up é facilmente bloqueada pelo Firewall ou Security Software, a janela pop-up não pode ser exibida e, portanto, o login de curto prazo não pode ser conectado. Nesse caso, o Ajax pode ser usado em vez da janela pop. O código que exclui o usuário em segundo plano é executado, mas não será restrito pelo firewall:
<Cript> // <! [CDATA [var http_request = false; function makerequest (url) {http_request = false; if (window.xmlhttPrequest) {// mozilla, safari, ... http_request = new XmlHtTrPrequil. {http_request.overridemimetype ('text/xml');}} else if (window.activeXObject) {// ietria {http_request = new ActiveXObject ("msxml2.xmlhttp");} catch (e) {{htttttp_ htt_r ActivexObject ("Microsoft.xmlHttp");} catch (e) {}}} if (! Http_request) {alert ('desistindo :( não é possível criar um xmlHttp instituta'); return; true); http_request.send (null);} função alertContents () {if (http_request.readyState == 4) {if (http_request.status == 200) {window.close ();} {} {'). {makerequest ('AccountUnbound.jsp');} //]]> </script> Existem muitas explicações detalhadas para o código AJAX acima na Internet. Adicioná-lo ao evento de fechamento do navegador OnBeForeUnload () funcionará muito bem em segundo plano; portanto, não há necessidade de se preocupar com o problema de que os pop-ups às vezes serão inválidos.
Depois de usar este código, o código JS no conta de unidade no acima ② fecha a janela pop-up window.close (); não é mais necessário.
O exposto acima é a implementação da Web Java da função de login QQ que o editor apresenta a você. Uma conta só pode fazer login em uma pessoa ao mesmo tempo. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!