Pour un compte qui ne peut se connecter qu'une seule personne en même temps, elle peut être réalisée par la méthode suivante:
1. Ajouter l'utilisateur à une arraylist lorsque l'utilisateur se connecte
2. Lorsque vous vous connectez à nouveau, vérifiez s'il y a un utilisateur dans ArrayList. Si l'utilisateur existe déjà dans ArrayList, il sera empêché de se connecter.
3. Lorsque l'utilisateur sort, l'utilisateur doit être supprimé de l'arraylist, qui est divisé en trois situations
① Utilisez le bouton de déconnexion pour quitter normalement
② Cliquez sur le bouton Fermer le navigateur ou utilisez Alt + F4 pour quitter, et vous pouvez utiliser JavaScript pour capturer l'événement de clôture de la page.
Exécutez une méthode Java pour supprimer les utilisateurs dans ArrayList
③ Connexion inhabituelle, comme un crash ou un crash soudain sur le système client, vous pouvez utiliser l'utilisateur correspondant à la session pour supprimer la session si la session n'est pas active de temps en temps, afin que l'utilisateur doit attendre un certain temps avant de se connecter normalement.
Défini dans la connexion:
// Utilisé pour stocker tous les comptes connectés sur le côté serveur Public STATIC LISTCACTUSS;
Méthode de connexion Login ():
// Définissez le temps d'inactivité de session sur 30 minutes request.getSession (). SetMaxInactiveInterval (60 * 30); if (logonAccouts == null) {logonAccouts = new ArrayList ();} // Vérifiez s'il y a un utilisateur dans ArrayList pour (int i = 0; i <logonCountS.Size (); i ++) {compte existantccountyCount = (compcount. if (account.getAccountId (). Equals (existaccount.getAccountId ())) {return "refusé";}} // Lorsque l'utilisateur se connecte, ajoutez sessionID à un objet de compte // plus tard ③ Vous devez supprimer le compte utilisateur correspondant.SetSessionId (request.getSession (). GetId ()); // cet utilisateur est sauvé à l'arrAllList STATIC CLASSE STATICE CLASSE CLASSE CLASSE CLASSE (//); return "connexion";① Utilisez le bouton de déconnexion pour quitter normalement
Méthode de sortie Logout ():
if (LogonAccounts == NULL) {LogonAccounts = new ArrayList ();} // Supprimer l'utilisateur dans ArrayList ⑴ pour (int i = 0; i <logonAccounts.size (); i ++) {compte existant = (compte) logonAccounts.get (i); if (compte.getAccountId (). equals (existaccount.getAccountId ())) {logonAccounts.reMove (compte);}}② Cliquez sur le bouton Fermer le navigateur ou utilisez Alt + F4 pour quitter:
Une fenêtre apparaît en arrière-plan, supprime l'utilisateur dans la liste Array dans la fenêtre contextuelle
function window.onbeForeunLoad () {// Que vous soyez quitter le bouton Fermer ou utilisez Alt + F4 // si l'événement OnBeforeunLoad est déclenché pour actualiser, l'instruction if suivante ne s'exécute pas si (event.clientx> document.body.clientwidth &&&&&D event.clienty <0 || event.altkey) {window.open ('accountUnbound.jsp', '', 'height = 0, width = 0, top = 10000, gauche = 10000');}}accountUnbound.jsp: supprimez l'utilisateur dans ArrayList dans la fenêtre contextuelle
<% Compte compte = (compte) request.getSession (). GetAttribute ("compte"); if (compte! = Null) {if (loginaction.logonAccouts == null) {LoginAction.logonAccouts = new ArrayList ();} // Delete the User dans ArrayList - le code suivant est le même que dans ⑴ ci-dessus pour (INT I = 0; i; i ++) {compte existantCount = (compte) LogonAccounts.get (i); if (compte.getAccountId (). equals (existaccount.getAccountId ())) {LogonAccounts.Remove (compte);}}}%>Afin de s'assurer que le code ci-dessus peut être exécuté, fermez cette fenêtre contextuelle après 3 secondes (également située dans AccountUnbound.jsp)
<Script> setTimeout ("closewindow ();", 3000); fonction closewindow () {window.close ();} </cript>③ Faire de la connexion implémente HTTPSESSESSELListener et implémentez les méthodes SessionCreed et SessionDestRoyed. Supprimer les utilisateurs dans ArrayList dans SessionDestRoyed (si l'utilisateur est inactif pendant plus de 30 minutes, cette méthode sera exécutée)
public void SessionDestRoyed (événement httpSessionEvent) {// Obtenez le SessionID en cas de inactif et supprimez l'utilisateur dans la chaîne de connexion correspondante sessionID = event.getSession (). getID (); pour (int i = 0; i <logonAccount.size (); i ++) {compte existant (compte) logonAccount.get (i); if (compte.getSessionId (). equals (existaccount.getSessionId ())) {LogonAccounts.Remove (compte);}}}Note:
Pour ce qui précède, puisque la fenêtre contextuelle est facilement bloquée par le pare-feu ou le logiciel de sécurité, la fenêtre contextuelle ne peut pas être apparue, et donc la connexion à court terme ne peut pas être connectée. Dans ce cas, Ajax peut être utilisé à la place de la fenêtre contextuelle. Le code qui supprime l'utilisateur en arrière-plan est exécuté, mais ne sera pas limité par le pare-feu:
<Script> // <! [cdata [var http_request = false; function makerequest (url) {http_request = false; if (window.xmlhttprequest) {// mozilla, safari, ... http_request = new xmlHttprequest (); if (http_request = new XmlHttPrequest (); if (http_request. {http_request.overridemimeType ('text / xml');}} else if (window.activexObject) {// ietry {http_request = new activeXObject ("msxml2.xmlhttp");} catch (e) {try {http_request = new ActiveXObject ("Microsoft.xmlHttp");} catch (e) {}}} if (! Http_request) {alert ('Abanding :( Impossible de créer une instance xmlhttp'); return false;} http_request.onreadystatechange = alertContents; http_request.Opend. true); http_request.send (null);} fonction alertContents () {if (http_request.readystate == 4) {if (http_request.status == 200) {window.close ();} else {alert ('il y avait un problème avec la demande. {makerequest ('accountUnbound.jsp');} //]]> </ script> Il existe de nombreuses explications détaillées du code AJAX ci-dessus sur Internet. L'ajout de l'événement de clôture du navigateur onBeforeunLoad () fonctionnera très bien en arrière-plan, il n'est donc pas nécessaire de s'inquiéter du problème que les fenêtres contextuelles seront parfois invalides.
Après avoir utilisé ce code, le code JS dans AccountUnbound.jsp dans ce qui précède ② ferme la fenêtre pop-up Window.close (); n'est plus nécessaire.
Ce qui précède est l'implémentation Web Java de la fonction de connexion QQ que l'éditeur vous présente. Un compte ne peut se connecter qu'une seule personne en même temps. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!