2016-05-06 2 views
-1

私は1つのアプリケーションを使用しています。そのために、私はテーブルの状態とipで2つの列を取った。ユーザーがすでに1台のコンピュータからログインしている場合、同じマシンから再度ログインできますが、別のマシンからログインしようとすると、新しいマシンのIPが割り当てられます。彼は以前のコンピュータからアクセスすることができます。どうして?彼をどのようにログアウトする?また、あるブラウザからログアウトした場合、彼は両方のブラウザからログインしていれば別のブラウザからアクセスすることができます。彼をすべてのブラウザからログアウトするには? パブリッククラスがloginservletはHttpServletを拡張{サーブレット内の同じコンピュータの1つのブラウザからログアウトした場合のユーザのログアウト方法

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"); 

      } 


     } 
    }} 

パブリッククラスLogoutServletはHttpServletをを拡張{

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

これまでにコードを共有してください。 –

+0

「同じコンピュータ上の他のデバイスから」何を求めていますか? – viveksinghggits

+0

そのためのJavaツールは、ユーザー名とIPでアクティブなセッションを追跡するSessionListenerと、不要なセッションを閉じるためのフィルタです。しかしコードなしで私はもっと言うことはできません –

答えて

0

あなたはこれを達成するためにパラメータを追加する必要があります。

IPとブール値の組み合わせであるsessionvalidationを含むもの。 (127.0.0.1-true)

ブラウザからログインするときはブール値をtrueに設定し、ログアウトするとfalseに設定します。すべてのページにチェックを入れて、このパラメータがtrueであることを確認します。また、アクセスしているシステムのIPとこの変数のIPでもチェックします。彼がログアウトすると、他のブラウザ/コンピュータからはアクセスできなくなります。

+0

私はそのために1つのステータスカラムを取った。彼がログアウトするとステータスはオンラインとオフラインになります。ログアウトすると –

+0

が表示されますが、私はchromeからログインしてからfirefoxからログインするとします。私がfirefoxからログアウトすると、テーブルの列が更新されたoflineとipがクリアされます。しかしクロムで私はまだ私のプロフィールにアクセスすることができます。 1つのブラウザからログアウトすると、すべてのブラウザからログアウトする方法。 –

+0

すべてのページのパラメータに基づいてセッションを検証する必要があります。したがって、firefoxからログアウトしてchromeから試してみると、ロード時にこのparamをチェックします。これはfalseを含み、セッションを無効にする必要があります。 – Prabahar

関連する問題