tommy18 Skrevet 10. juli 2005 Del Skrevet 10. juli 2005 Har sett meg blind på følgende kode. Er en servlet, og får bare opp innloggingssiden (funksjonen logginn). Kan noen se hva som er feil? import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class Seanse extends HttpServlet { public void service( HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html"); HttpSession s = req.getSession(true); if( s.isNew() || s.getAttribute("navn") == null ) { logginn( req, res ); } else if( req.getParameter("navn") != null ) { s.setAttribute("navn", req.getParameter("navn")); innlogget( req, res ); } else { innlogget( req, res ); } } public void logginn( HttpServletRequest req, HttpServletResponse res ) throws IOException { PrintWriter out = res.getWriter(); out.println( "<html>" +"<body><h1>Innloggingsside</h1>" +"<form method=\"post\">Skriv inn navn: <br>" +"<input type=\"text\" name=\"navn\" />" +"<input type=\"submit\" name=\"sjekkloginn\" " +"<value=\"login\" size=\"10\">" +"</form></body></html>"); } public void innlogget( HttpServletRequest req, HttpServletResponse res ) throws IOException { PrintWriter out = res.getWriter(); HttpSession s = req.getSession(true); out.println("<HTML><BODY><H1>Allerede innlogget...</H1><BR><BR>" +"Hei :"+s.getAttribute("navn")+"<br/>" +"</BODY></HTML>"); } } Lenke til kommentar
MailMan13 Skrevet 10. juli 2005 Del Skrevet 10. juli 2005 (endret) Den første if setningen din vil alltid slå til siden du ikke setter noen attributt i sesjonen. Erstatt: if( s.isNew() || s.getAttribute("navn") == null ) med: if( s.getAttribute("navn") == null && req.getParameter("navn") == null ) De to betingelsene du bruker er forsåvidt redundante siden en ny sesjon ikke har noen attributter. Endret 10. juli 2005 av MailMan13 Lenke til kommentar
tommy18 Skrevet 10. juli 2005 Forfatter Del Skrevet 10. juli 2005 Er du sikker? Når en bruker logger seg på siden, så opprettes det en session, men session variabelen opprettes ikke da, og er følgelig false. Derfor, når bruker logger seg på igjen, så vil session eksistere, og session variabelen ikke være lik null, altså begge vil være false, og den skulle ikke slått igjennom. Lenke til kommentar
tommy18 Skrevet 10. juli 2005 Forfatter Del Skrevet 10. juli 2005 Har fått det til på en annen måte, se kode nedenfor. Det jeg prøver å få til nå, er at to brukere skal kunne "snakke sammen". Først skal en bruker logge seg på, og få frem en siden der det står antall innloggede (som da er 1). Når bruker nr 2 logger seg på, skal han da få frem at det da er 2 innloggede brukere. Det som skjer nå er at mange brukere kan logge seg på, og hver gang man trykker refresh, så økes antInnloggede variabelen. Har prøvd med if( s.isNew() ) ++antInnloggede uten at det hjalp. Noen som kan gi meg noen hint? import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class Seanse extends HttpServlet { public static int antInnloggede = 0; public void service( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); HttpSession s = req.getSession(true); if( s.isNew() || req.getParameter("navn") == null ) { logginn( req, res ); } else if( req.getParameter("navn") != null ) { s.setAttribute("navn", req.getParameter("navn")); antInnloggede++; innlogget( req, res ); } else { //innlogget( req, res ); } } public void logginn( HttpServletRequest req, HttpServletResponse res ) throws IOException { PrintWriter out = res.getWriter(); out.println( "<html>" +"<body><h1>Please log in</h1>" +"<form method=\"post\">Your name: <br>" +"<input type=\"text\" name=\"navn\" />" +"<input type=\"submit\" name=\"checklogin\" " +"<value=\"login\" size=\"10\">" +"</form></body></html>"); } public void innlogget( HttpServletRequest req, HttpServletResponse res ) throws IOException { PrintWriter out = res.getWriter(); HttpSession s = req.getSession(true); out.println("<HTML><BODY><H1>Allerede innlogget...</H1><BR><BR>" +"Hello :"+s.getAttribute("navn")+"<br/>" +"Antall innloggede brukere er: "+antInnloggede +"</BODY></HTML>"); } } Lenke til kommentar
pian Skrevet 10. juli 2005 Del Skrevet 10. juli 2005 Hva med å teste litt da. Dropp .isNew testen. Fortsatt samme feil? Bytt rekkefølgen. Fortsatt samme feil? Prøv med .Equals("") i stedet for null. Lenke til kommentar
tommy18 Skrevet 10. juli 2005 Forfatter Del Skrevet 10. juli 2005 (endret) Har prøvd, står helt fast. En annen ting, når jeg åpner en browser vindu og kjører servleten, så vil man på Innlogget-siden se Session-ID. Hvis jeg åpner et nytt browservindu på den samme pc'en, og gjør det samme, så blir session ID'en helt lik, og det er vel feil? Om jeg derimot åpner et nytt browservindu på en annen pc, og kjører servlet, blir session ID ulik... Vil dette hindre meg fra i å teste ut servleten om jeg bare har en pc tilgjengelig? Endret 10. juli 2005 av tommy18 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå