Announcement

Collapse
No announcement yet.

Servlets Cookies Setzten, Glasfish 3.1

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Servlets Cookies Setzten, Glasfish 3.1

    Hallo zusammen, ich würde gerne Cookies Setzten für das Sessionstracking, leider wird das Cookies anscheinend nicht Korreckt gesendet, beim Browser kommt zumindest nichts an

    Ich hab leider kein Ahnung was ich noch Ausprobieren könnte und hab auch schon erfolglos gegoogelt.

    Benutzer Java 7, fals das wichtig ist.

    hier noch der Servlet Code:

    Code:
    public class Login extends HttpServlet {
    
        //Datenbank inizialisieren für diese seite
            dbverbindung db=new dbverbindung(true);
            Verschluesseln v=new Verschluesseln();
        /** 
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            ServletContext c= getServletContext();
            RequestDispatcher d=c.getRequestDispatcher("/WEB-INF/seiten/Login.jsp");
            d.forward(request, response); 
        }
    
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /** 
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
            System.out.println("GET");
            Cookie[] in=request.getCookies();
            Cookie t=in[0];
        }
    
        /** 
         * Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
            System.out.println("POST");
            //benutzer aus Datenbank filtern und Schauen ob Passwort übereinstimmt
            ResultSet rs=db.dbFragen("select * from registrierte where benutzername='"+request.getParameter("benutzername") +"' and passwort='"+request.getParameter("passwort") +"';");
            try {
                 String keymap="abcdefghijklmnopqrstuvwxyz1234567890";
                if(rs.next()&&rs!=null){
                    Random rnd=new Random();
                    v.setKey(request.getParameter("benutzername").toLowerCase()+keymap.toCharArray()[rnd.nextInt(keymap.length())]+keymap.toCharArray()[rnd.nextInt(keymap.length())]);
                    v.setFeld();
                    //Erzeugen eines Cookies mit Benutzernamen + Zeichen als Inizialisierungsstring für die Verschlüsselung 
                    //sowie eine max 50 Zeichen langer Text.
                    Cookie c=new Cookie("authentifizierung", v.codiere("Entweder verheiratet sich mein Sohn... oder nicht.", true));
                    //Cookies schliesen wenn Browser geschlossen wird
                    c.setMaxAge(100);
                    response.addCookie(c);
                    
                }
            } catch (SQLException ex) {
            }
        }
    
        /** 
         * Returns a short description of the servlet.
         * @return a String containing servlet description
         */
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }
    Danke im Voraus für die Antwort

  • #2
    Vielleicht erstmal klären, ob der Request per GET oder POST kommt und dann in der Methode agieren.

    EDIT
    und

    c.setMaxAge(100);

    100 Sekunden ist ja nun auch nicht gerade lange.

    Hast du sowas laufen wie CookieMonster u.a. der unbekannte Cookies blockt?
    Zuletzt editiert von Christian Marquardt; 14.12.2011, 15:07.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Vielleicht erstmal klären, ob der Request per GET oder POST kommt und dann in der Methode agieren.

      EDIT
      und

      c.setMaxAge(100);

      100 Sekunden ist ja nun auch nicht gerade lange.

      Hast du sowas laufen wie CookieMonster u.a. der unbekannte Cookies blockt?
      Request kommt per Post, methode reagiert.

      Cookies Blokieren ist aus, habs auch schon mit verschiedenen Browsern Probiert.

      Und was das Alter angeht ich habs auch schon mit -1 Versucht und 100 Sekunden sind doch eine eher grosse Zeitspanne

      Hier noch das dazugehörige JSP:
      HTML Code:
      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
              <title>Login Seite</title>
              <link rel="stylesheet" type="text/css" href="/Forum/style.css" />
              <script src="/Forum/jquery.js"></script> 
              <script>
                  $(document).ready(function(){
              $('#navigation').load('/Forum/navigation');
                  });
              </script>
          </head>
          <body>
              <div id="hintergrund">
                  <div id="navigation">
                      Lade Navigation
                  </div>
                  <div id="links">
                      <div id="input">  
                          <form id="loginfeld" onsubmit="javascript:return bla();"  method="post">  
                              <h3>Einloggen</h3>    
                              <div id="kombi">
                                  <table id="login">
                                      <tr>
                                          <td>
                                              Benutzername:
                                          </td>
                                          <td>
                                         <input type="text" name="benutzername" size="30" value="">
                                          </td>
                                      </tr>
                                      <tr>
                                          <td>
                                              Passwort:
                                          </td>
                                          <td>
                                          <input type="text" name="passwort" size="30" value="">
                                          </td>
                                      </tr>
                                  </table></br>
                                  Noch Keinen Account? Kein Problem einfach <a href="/Forum/Registrieren">Hier</a> Registrieren:
                              </div>
                              <div id="cmd">
                                  <input type="submit"  value="Einloggen">
                              </div>
                          </form>
                      </div>
                      <div id="posts">
                      </div>  
                  </div>
              </div>
              <script> 
                  function bla() {
                      $.post('/Forum/User/Login',
                      $('#loginfeld').serialize(),
                      function(result) {
                          $('#foo').append(result);
                      });
                      return false;
                  };
              </script>
          </body>
      </html>
      Und noch die Headerdaten so wie Firegug sie mir gibt:

      Antwort-Header
      X-Powered-By JSP/2.2
      Server GlassFish Server Open Source Edition 3.1.1
      Content-Type text/html;charset=UTF-8
      Transfer-Encoding chunked
      Date Wed, 14 Dec 2011 13:11:12 GMT

      Anfrage-Header
      Host localhost:8080
      User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
      Accept */*
      Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
      Accept-Encoding gzip, deflate
      Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
      Connection keep-alive
      Content-Type application/x-www-form-urlencoded; charset=UTF-8
      X-Requested-With XMLHttpRequest
      Referer http://localhost:8080/Forum/User/Login
      Content-Length 40
      Cookie JSESSIONID=caf8ef062028ec28aa681e6da724; __utma=111872281.790222009.1323684390.1323684390.1 323684390.1; __utmz=111872281.1323684390.1.1.utmcsr=(direct)|ut mccn=(direct)|utmcmd=(none)

      Comment


      • #4
        Wenn die JSP zum Servlet führt und die Postmethode ausgeführt wird, was gibt diese zurück?

        Es wird nur ein Cookie in den Header des Response gesetzt und weiter sehe ich nichts. Redirect?
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Wenn die JSP zum Servlet führt und die Postmethode ausgeführt wird, was gibt diese zurück?

          Es wird nur ein Cookie in den Header des Response gesetzt und weiter sehe ich nichts. Redirect?
          Postmethode hast du ja oben

          wie redirect? überall wo cookies gesetzt werden waren genau diese beiden zeilen (erzeugen, zu response hinzufügen), muss ich da noch mehr machen?

          Comment


          • #6
            Na was soll den nach dem Servlet angezeigt werden?

            Der Request von der JSP führte zum Servlet. Der Browser wartet auf eine Antwort. Diese wird im Response übermittelt. Im Header des Response steht ein Cookie, aber ein Inhalt ist nicht vorhanden.

            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>DEMO</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("Test");
            out.println("</body></html>");

            oder


            response.sendRedirect(DEINE URL);
            Christian

            Comment


            • #7
              Demo
              Diese JSP ruft das Servlet auf
              [highlight=java]



              <%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
              <!DOCTYPE html>
              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
              <title>JSP Page</title>
              </head>
              <body>
              <h1>Hello World!</h1>
              <form action="CookieServlet" method="POST">
              <input type="submit" />
              </form>
              </body>
              </html>
              [/highlight]


              Das Servlet
              [highlight=java]

              @WebServlet(name="CookieServlet",urlPatterns=
              {
              "/CookieServlet"
              })
              public class CookieServlet extends HttpServlet
              {
              protected void processRequest(HttpServletRequest request,HttpServletResponse response)
              throws ServletException,IOException
              {
              response.setContentType("text/html;charset=UTF-8");
              PrintWriter out=response.getWriter();
              try
              {
              Cookie c=new Cookie("testcookie","keinWert");
              c.setMaxAge(3000);
              response.addCookie(c);
              out.println("<html>");
              out.println("<head>");
              out.println("<title>Servlet CookieServlet</title>");
              out.println("</head>");
              out.println("<body>");
              out.println("<h1>Servlet CookieServlet at "+request.getContextPath()+"</h1>");
              out.println("</body>");
              out.println("</html>");

              }
              finally
              {
              out.close();
              }
              }

              @Override
              protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
              {
              processRequest(request,response);
              }

              @Override
              protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
              {
              processRequest(request,response);
              }

              @Override
              public String getServletInfo()
              {
              return "Short description";
              }

              }


              [/highlight]


              Ergebnisseite und Cookie

              Bild1.jpg
              Christian

              Comment


              • #8
                Originally posted by Christian Marquardt View Post
                Na was soll den nach dem Servlet angezeigt werden?

                Der Request von der JSP führte zum Servlet. Der Browser wartet auf eine Antwort. Diese wird im Response übermittelt. Im Header des Response steht ein Cookie, aber ein Inhalt ist nicht vorhanden.

                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println("<html>");
                out.println("<head>");
                out.println("<title>DEMO</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("Test");
                out.println("</body></html>");

                oder


                response.sendRedirect(DEINE URL);
                Ok, jetzt quält mich noch eine Kleinigkeit:
                Was muss ich denn da nun angeben das es mein Cookie setzt?
                Dies sollte ja für das Gesamte Forum gelten, ich habs schon mit response.encodeRedirectURL("/User/Login") versucht, hat beides nichts gebracht
                Auch nur mit /Login bringts nichts.

                URL="http://localhost:8080/Forum/User/Login"


                Danke schon mal für das mit send damit bin ich schon einen Grossen Schritt weiter


                Interessant, bei dir scheint es ja zu Funktionieren, kann es daran Liegen das bei mir Das Cookie im Post gesetzt wird?
                Es handelt sich dabei um ein Anmeldeformular, sprich ich weiss nicht schon beim Process Request wie der Inhalt ist.

                Ich find es schon komisch das es bei mir nicht klappt

                EDIT: Also mit deiner Lösung klappt es, allerdings wenn ich den Code aus deiner Nehme und bei meinem Projekt Verwende dann tut sich wieder nichts.

                EDIT2: Kann es sein das das Cookie setzten nur über Process Request geht?


                EDIT3: Also jetzt geht es, danke für die Gute Hilfestellung, ich darf diesen Forwarder nicht im Process Request haben, dann geht das Cookie setzten
                Zuletzt editiert von Multithread; 14.12.2011, 19:04.

                Comment


                • #9
                  Es spielt keine Rolle, wo das Cookie gesetzt wird
                  Christian

                  Comment

                  Working...
                  X