2016-05-06 6 views
-1

ausgeloggt Ich habe eine Anwendung, in der ich den Benutzer für mehrere Logins von verschiedenen Geräten beschränken. Dafür habe ich zwei Spalten in meinem Tabellenstatus und ip genommen. Wenn der Benutzer sich bereits von einem Computer aus angemeldet hat, kann er sich erneut von demselben Computer aus anmelden, aber wenn er versucht, sich von einem anderen Computer anzumelden, wird die IP des neuen Rechners zugewiesen. aber er kann auf den vorherigen Computer zugreifen. Warum? wie man ihn abmeldet? Und auch wenn ich mich von einem Browser abgemeldet habe, kann er von einem anderen Browser aus zugreifen, wenn er sich von beiden Browsern eingeloggt hat. Wie kann ich ihn von allen Browsern abmelden? public class LoginServlet erweitert HttpServlet {Wie der Benutzer abgemeldet wird, wenn sie von einem Browser auf dem gleichen Computer in Servlet

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doPost(request, response); 
} 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    System.out.println("LoginServlet.........."); 
    InetAddress address; 
    //String hostname; 
    byte[] ip = new byte[0]; 
    PrintWriter out = response.getWriter(); 
    HttpSession session = request.getSession(true); 

    LoginDTO loginDTO = (LoginDTO) session.getAttribute("loginDTO"); 

    int noOfCartItems = 0; 
    session.setAttribute("noOfCartItems", noOfCartItems); 

    Connection con = null; 
    try { 
     String operation = request.getParameter("operation"); 
     if (operation.equalsIgnoreCase("signin")) { 
      String mobile_email = request.getParameter("mobile_email"); 
      String password = request.getParameter("password"); 
      address = InetAddress.getLocalHost(); 
     ip = address.getAddress(); 
     String ipAddress = com.oeuvretc.util.RawIPToString.getIpAddress(ip); 
     System.out.println(ipAddress); 
      con = ConnectionManager.getConnection(); 

      PreparedStatement ps=con.prepareStatement("SELECT * FROM view_user_details WHERE (mobile=? OR email_id=?) AND user_password=?"); 
      ps.setString(1, mobile_email); 
      ps.setString(2, mobile_email); 
      ps.setString(3, password); 
      ResultSet rs=ps.executeQuery(); 

      if(rs.next()) 
      { 
       HttpSession s=request.getSession(); 
       s.setAttribute("mob", mobile_email); 
       out.print(1); 
       String ipadd=rs.getString("ip"); 
       String stat=rs.getString("status"); 
       if(ipadd.equals("")||ipadd.equals(ipAddress)) 
       { 
        PreparedStatement ps3=con.prepareStatement("update user_registration set status=?, ip=? where (mobile=? or email_id=?)"); 
        ps3.setString(1,"ONLINE"); 
        ps3.setString(2, ipAddress); 
        ps3.setString(3,mobile_email); 
        ps3.setString(4,mobile_email); 
        int count=ps3.executeUpdate(); 
        if (loginDTO == null) { 
         loginDTO = new LoginDTO(); 
         loginDTO.setLoginID(mobile_email); 
         loginDTO.setPassword(password); 

         session.setAttribute("loginDTO", loginDTO); 
         session.setAttribute("loginStatus", "logged-in"); 
        } 

         PersonalInfoDTO personalInfoDTO = new PersonalInfoDTO(); 
         if (rs.getString("fname") != null) { 
          personalInfoDTO.setFirstName(rs.getString("fname")); 
         } 
         if (rs.getString("lname") != null) { 
          personalInfoDTO.setLastName(rs.getString("lname")); 
         } 

         String name = null; 
         if (rs.getString("fname") != null) { 
          name = rs.getString("fname"); 
         } 
         if (rs.getString("lname") != null) { 
          name = name + " " + rs.getString("lname"); 
         } 
         if (name != null) { 
          personalInfoDTO.setName(name); 
         } 

         if (rs.getString("email_id") != null) { 
          personalInfoDTO.setEmail(rs.getString("email_id")); 
         } 
         if (rs.getString("mobile") != null) { 
          personalInfoDTO.setMobile(rs.getString("mobile")); 
         } 
         if (rs.getString("gender") != null) { 
          personalInfoDTO.setGender(rs.getString("gender")); 
         } 
         if (rs.getString("blood_group") != null) { 
          personalInfoDTO.setBloodGroup(rs.getString("blood_group")); 
         } 
         if (rs.getString("dob") != null) { 
          personalInfoDTO.setDOB(rs.getString("dob")); 
         } 
         if (rs.getString("height_feet") != null) { 
          personalInfoDTO.setHeightFeet(rs.getString("height_feet")); 
         } 
         if (rs.getString("height_inch") != null) { 
          personalInfoDTO.setHeightInch(rs.getString("height_inch")); 
         } 
         if (rs.getString("height_cm") != null) { 
          personalInfoDTO.setHeightCentiMeter(rs.getString("height_cm")); 
         } 
         if (rs.getString("weight_hg") != null) { 
          personalInfoDTO.setWeightKG(rs.getString("weight_hg")); 
         } 
         if (rs.getString("weight_lbs") != null) { 
          personalInfoDTO.setWeightLBS(rs.getString("weight_lbs")); 
         } 

         loginDTO.setPersonalInfoDTO(personalInfoDTO); 

         AddressDTO addressDTO = new AddressDTO(); 
         if (rs.getString("locality") != null) { 
          addressDTO.setLocality(rs.getString("locality")); 
         } 
         if (rs.getString("pincode") != null) { 
          addressDTO.setPincode(rs.getString("pincode")); 
         } 
         if (rs.getString("addr") != null) { 
          addressDTO.setAddr(rs.getString("addr")); 
         } 
         if (rs.getString("landmark") != null) { 
          addressDTO.setLandmark(rs.getString("landmark")); 
         } 
         if (rs.getString("Cityname") != null) { 
          addressDTO.setCity(rs.getString("Cityname")); 
         } 
         if (rs.getString("Statename") != null) { 
          addressDTO.setState(rs.getString("Statename")); 
         } 
         if (rs.getString("Countryname") != null) { 
          addressDTO.setCountry(rs.getString("Countryname")); 
         } 

         loginDTO.setAddressDTO(addressDTO); 

         //loginDTO.setImage(rs.getBinaryStream("image")); 
         loginDTO.setProfilePic(rs.getString("image")); 

         //System.out.println(rs.getString("image")); 

         // fetch if any item is available in the user cart or not 
         PreparedStatement ps1 = con.prepareStatement("SELECT test_kit FROM user_registration WHERE mobile=? OR email_id=?"); 
         ps1.setString(1, loginDTO.getLoginID()); 
         ps1.setString(2, loginDTO.getLoginID()); 
         ResultSet rs1 = ps1.executeQuery(); 
         if (rs1.next()) { 
          InputStream is = rs1.getBinaryStream(1); 
          if (is != null) { 
           ObjectInputStream ois = new ObjectInputStream(is); 
           HashMap<String, CartDTO> mapOfCartDTO = (HashMap<String, CartDTO>) ois.readObject(); 
           session.setAttribute("mapOfCartDTO", mapOfCartDTO); 

           noOfCartItems = mapOfCartDTO.size(); 
           session.setAttribute("noOfCartItems", noOfCartItems); 
          } 
         } 




       } 
       else{ 

       out.print(2); 
        PreparedStatement ps3=con.prepareStatement("update user_registration set status=?, ip=? where (mobile=? or email_id=?)"); 
        ps3.setString(1,"OFFLINE"); 
        ps3.setString(2, ""); 
        ps3.setString(3,mobile_email); 
        ps3.setString(4,mobile_email); 
        int count=ps3.executeUpdate(); 

        System.out.println("Already Logged In. from another device."); 
       } 

      } 
      else{ 
      out.print(0); 
       System.out.println("Invalid Username or Password"); 

      } 


     } 
    }} 

public class LogoutServlet HttpServlet erstreckt {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doPost(request, response); 
} 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("LogoutServlet.........."); 
    Connection con = null; 

    HttpSession session = request.getSession(false); 
    HttpSession s=request.getSession(); 
    String mob=(String) s.getAttribute("mob"); 
    String siginThrough = (String) session.getAttribute("siginThrough"); 
    try{ 
     con = ConnectionManager.getConnection(); 
     PreparedStatement ps3=con.prepareStatement("update user_registration set status=?, ip=? where (mobile=? or email_id=?)"); 
     ps3.setString(1,"OFFLINE"); 
     ps3.setString(2, ""); 
     ps3.setString(3,mob); 
     ps3.setString(4,mob); 
     int count=ps3.executeUpdate(); 
     session.invalidate(); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 


    //response.sendRedirect(getServletContext().getInitParameter("baseURL_USER")); 
    //response.sendRedirect("/scylla/"); 
    if (siginThrough != null) { 
     if (siginThrough.equals("facebook")) { 
      response.getWriter().print(siginThrough); 
     } else if (siginThrough.equals("google")) { 
      response.getWriter().print(siginThrough); 
     } 
    } else { 
     response.getWriter().print(1); 
    } 

} 

}

+0

teilen Sie bitte Code so weit getan. –

+0

was fragen Sie, 'von anderen Geräten auf demselben Computer.' ..? – viveksinghggits

+0

Die Java-Tools für diese sind ein SessionListener, um eine Verfolgung von aktiven Sitzungen mit Benutzername und IP und einen Filter zum Schließen unerwünschter Sitzungen zu behalten. Aber ohne Code kann ich nicht mehr sagen –

Antwort

0

Sie sollten einen Parameter hinzufügen, um dies zu erreichen.

Eins, um die Sessionvalidation zu enthalten, die eine Kombination aus IP und Boolean sein sollte. zB (127.0.0.1-true)

Sie setzen den Booleschen Wert als wahr, wenn er sich von einem Browser anmeldet und nach dem Abmelden als false setzt. Fügen Sie auf allen Seiten eine Überprüfung hinzu, um zu überprüfen, ob dieser Parameter wahr ist, und auch die IP des zugreifenden Systems und die IP in dieser Variablen. Wenn er sich abmeldet, kann er nicht auf andere Browser/Computer zugreifen.

+0

erklären Ich nahm eine Statusspalte dafür. Wenn er sich anmeldet, wird der Status online und offline sein, wenn er sich abmeldet. –

+0

Aber angenommen, ich logge mich von Chrome ein und melde mich dann von Firefox an. Wenn ich mich von Firefox abmelde, wurde die Spalte der Tabelle aktualisiert, d. h. Dell und IP ist klar. aber auf Chrome kann ich immer noch auf mein Profil zugreifen. So loggen Sie sich von allen Browsern ab, wenn ich mich von einem Browser abmelde. –

+0

Sie sollten die Sitzung basierend auf dem Parameter auf jeder Seite überprüfen. Wenn Sie sich also von Firefox abmelden und von Chrome aus versuchen, überprüfen Sie diesen Parameter beim Laden, der false enthält und die Sitzung ungültig machen muss. – Prabahar

Verwandte Themen