Pessoal, meu esquema de autenticacao em uma pagina , com login e senha, armazena na sessao o identificador do usuario bem como outras informacoes relevantes. Eu tambem gravo o id da sessao do usuario no banco de dados para garantir uma certa seguranca. Este meu sistema eh comum para varios usuarios. Eh um formulario comum a todos. Mas quando um usuario esta logado, e outro tenta se autenticar, este consegue e o outro fica a ver navios. isto eh, ele eh desconectado do sistema. eu pensei em criar uma variavel boolena para indicar que o usuario esta conectado, mas caso o usuario saia sem efetuar logoff, esta variavel iria permanecer com o valor true. Alguem tem ideia de como fazer algo para que , quando um usuario estiver conectado e outro tentar se conectar, este receber uma mensagem de que jah existe um usuario usando o sistema. grato pela atencao. ------------------ login.jsp <%@ page import="java.sql.*,java.util.*,java.security.*,sun.misc.*" session="false"%> <% /* ESTA PAGINA NAO EXIGE QUE SEJA AUTENTICADA ESTA PAGINA EXECUTA FUNCOES DE VALIDACAO QUE CRIAM OS DADOS NECESSARIOS PARA QUE AS PAGINAS POSTERIORES POSSAM SER USADAS ATRAVES DE AUTENTICACAO */ /* a pagina de login (esta) coloca na sessao o tipo de usuario. isto eh necessario para a criacao de menus personalizados para cada tipo de usuario */ // Conexao com RESIN Connection con = com.caucho.sql.DBPool.getPool("xurumelasConnection").getConnection(); // >>> Statement stmt; stmt=con.createStatement(); ResultSet rs = null; String queryInsert= new String(); String query= new String(); %> <% String idUser = new String(); // id do usuario . sera utilizado pra atualizar o banco de dados. String nome = new String(); // nome do usuario. sera utilizado na sessao para dar boas vindas para o usuario! :) String login = new String();// email veio do form . o email eh o login name do usuario String senha = new String(); // senha que veio do form String hashLocal = new String(); // hash(md5) da senha q veio do form String hashDB = new String(); // hash armazenado no banco de dados. eh utilizada para comparar com o hash gerado na autenticacao. boolean multiusuario = false; // usuario nao eh multiusuario por default Integer tipoTemp = null; String tipoParaSessao = null; // tipo do usuario . importante para fazer o encaminhanto para o menu correto. eh obtida da col tp_usuario tabela usuario int tipo = 0; // para ser usado nesta pagina. o tipo para sessao eh porque putValue da session soh aceita string String sessionID = new String(); // session criada caso usuario seja validado. sera incluida na coluna sessionID da tabela usuario // nota: a session sera sempre atualizada do banco de dados toda vez que o usuario tiver sucesso na autenticacao. // o valor inicial da sessionID no banco de dados eh nulo, pois na aprovacao do pre-cadastro eh feita a validacao e insercao de todas as colunas // da tabela usuario. // o hash armazenado na tabela usuario , foi inicialmente carregado atraves de uma senha inicial que o sistema gerou quando efetuou a // aprovacao do usuario %> <% // parametros vindos do formulario da pagina formulario_login.jsp login=request.getParameter("email"); senha=request.getParameter("senha"); %> <% // verifica se parametros sao validos boolean continuar = false; boolean achouEmail = false; boolean hashesIguais = false; if ( (login!=null)&&(senha!=null) ) { if ( (login.length()>5)&&(senha.length()==8)) // o usuario digitou um email e entrou com a senha com tamanho de 8 caracteres { continuar=true; } } if (continuar) { // verifica se email existe // retorna hs_senha, id_usuario, nm_usuario e tp_usuario query = "select id_usuario,nome_do_usuario,hash_senha_do_usuario,tipo_de_usuario,multiusuari o_usuario from usuario where situacao_do_usuario='n' AND email_do_usuario='"+login+"'"; //verifica se email existe rs= stmt.executeQuery(query); //pesquisa por email do usuario ##################### achouEmail = rs.next(); if (achouEmail) { idUser = rs.getString("id_usuario"); nome = rs.getString("nome_do_usuario"); hashDB = rs.getString("hash_senha_do_usuario"); tipoTemp = Integer.valueOf(rs.getString("tipo_de_usuario")); multiusuario = rs.getBoolean("multiusuario_usuario"); // 1=true, 0=false tipo = tipoTemp.intValue(); tipoParaSessao = tipoTemp.toString(); // gera hash da senha q veio do form byte[] inputBytes = senha.getBytes("UTF8"); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(inputBytes); byte[] digest = md5.digest(); BASE64Encoder encoder = new BASE64Encoder(); hashLocal = encoder.encode(digest); // compara os hashes if ( hashLocal.compareTo(hashDB)==0 ) { //hashes sao iguais hashesIguais =true; } } %> <% } // if continuar else { con.close(); %> <jsp:forward page="formulario_loginErro.jsp" /> <% } // else continuar%> <html> <head> <title>sistema xyz</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="expires" content="sat, 04 dec 1993 21:29:02 gmt"> <meta name="GENERATOR" content="Microsoft FrontPage 3.0"> </head> <body> <p align="center"><font face="Arial" size="3" color="#FF0000">Validacao de login e senha do usuario</font></p> <p align="center"><font face="Arial" size="3" color="#FF0000">Esta página cria a sessao do usuario e encaminha para a sua pagina de menu</font></p> <p align="center"><font face="Arial" size="3" color="#FF0000"><%=hashesIguais%></font></p> <% if (hashesIguais) //hashesIguais { // cria sessao para usuario e armazena no banco de dados na tabela usuario de acordo com o id usuario HttpSession session = request.getSession(true); session.putValue("idUser",idUser); session.putValue("tipo",tipoParaSessao); session.putValue("nome",nome); query = "UPDATE usuario SET "+ " sessao_do_usuario='"+session.getId()+"' "+ //valor da session id em string " where id_usuario=" + idUser; stmt.executeUpdate(query); %> <% // redireciona usuario para menu admin,consultor ou usuario switch(tipo) { case 1: //admin %> <jsp:forward page="menu_admin.jsp" /> <% break; case 2://consultor %> <jsp:forward page="menu_consultor.jsp" /> <% break; case 3://usuario informante %> <% if (multiusuario) { %> <jsp:forward page="menu_multiusuario.jsp" /> <% } else { %> <jsp:forward page="menu_usuario.jsp" /> <% } %> <% break; default: //pagina login %> <jsp:forward page="formulario_loginErro.jsp" /> <% } //switch %> <p><% } // if hashes iguais else { con.close(); %> <jsp:forward page="formulario_loginErro.jsp" /> <% } // else hashes con.close(); %> </p> <p> </p> <% if (!achouEmail) { %> <jsp:forward page="formulario_loginErro.jsp" /> <%} // if achouemail %> </body> </html> ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------