27. april 2004 - 13:19
Der er
16 kommentarer og 1 løsning
husk IP
Jeg har brug for en god idé til hvordan jeg tester på hvordan en ip er taget. Ideen er at man skal kunne stemme, men kun en gang, baseret på om en IP er sat i session objektet. String ip = request.getRemoteAddr(); ArrayList valg = (ArrayList) session.getAttribute("valg"); session.setAttribute("ip", ip);
Annonceindlæg fra Deloitte
27. april 2004 - 14:53
#1
Måske noget a la: ArrayList valg = (ArrayList)application.getAttribute("valg"); String ip = request.getRemoteAddr(); if(valg.contains(ip)) { // du har stemt en gang } else { // process stemme valg.add(ip); }
27. april 2004 - 19:13
#2
<%@ page language="java" import="java.util.*" %> <html> <head><title>Stem opgave</title></head> <body> <% String valgtvaerdi = request.getParameter("stemme"); String ip = request.getRemoteAddr(); ArrayList valg = (ArrayList) session.getAttribute("valg"); session.setAttribute("ip", ip); ArrayList valg = (ArrayList)application.getAttribute("valg"); if(valg.contains(ip)) { out.println("du har allerede stemt"); } else { // process stemme valg.add(ip); } if (valg==null) { valg = new ArrayList(); session.setAttribute("valg", valg); } if (valgtvaerdi != null) { valg.add(valgtvaerdi); } out.println("<p>"); out.println("Din IP er : "); out.println(session.getAttribute("ip")); out.println("</p>"); if (valg.size()>0) { for (int i=1;i<valg.size();i++) { out.println(i); out.println(valg.get(i)); } } %> <h3>Hvad er din yndlings farve</h3> <form name="stem" action="stem123.jsp"> <input type="radio" name="stemme" value="rod">Rød <br> <input type="radio" name="stemme" value="gron">Grøn <br> <input type="radio" name="stemme" value="blaa">Blå <br><br> <input type="submit" name="" value="Stem"> </form> </body> </html>
27. april 2004 - 19:14
#3
27. april 2004 - 19:27
#4
Det her syntes at virke, men jeg har stadig ikke styr på om folk allerede har stemt. <%@ page language="java" import="java.util.*" %> <html> <head><title>Stem opgave</title></head> <body> <% String valgtvaerdi = request.getParameter("stemme"); String ip = request.getRemoteAddr(); ArrayList valg = (ArrayList) session.getAttribute("valg"); session.setAttribute("ip", ip); if (valg==null) { valg = new ArrayList(); session.setAttribute("valg", valg); } if (valgtvaerdi != null) { valg.add(valgtvaerdi); } out.println("<p>"); out.println("Din IP er : "); out.println(session.getAttribute("ip")); out.println("</p>"); if (valg.size()>0) { for (int i=1;i<valg.size();i++) { out.println(i+". "); out.println(valg.get(i)+"<br>"); } } %> <h3>Hvad er din yndlings farve</h3> <form name="stem" action="stem123.jsp"> <input type="radio" name="stemme" value="rød">Rød <br> <input type="radio" name="stemme" value="grøn">Grøn <br> <input type="radio" name="stemme" value="blå">Blå <br><br> <input type="submit" name="" value="Stem"> </form> </body> </html>
27. april 2004 - 19:30
#5
Jeg er heller ikke med på hvorfor det først virker anden gang at man trykker på stem
27. april 2004 - 20:39
#6
Man er vel ret beset nød til at bruge en database hvis man skal styrer det ordenligt :-)
27. april 2004 - 20:41
#7
Nej. Kun hvis du skal kunne håndtere en server genstart. Jeg vil lige prøve og lave et par fungerende eksempler. Stay tuned.
27. april 2004 - 20:42
#8
Det ville være fedt :-)
27. april 2004 - 21:24
#9
vote1.jsp: <%@ page language="java" import="java.util.*" %> <html> <head><title>Stem</title></head> <body> <% List ips = (List)application.getAttribute("ips"); if(ips==null) { ips = new ArrayList(); application.setAttribute("ips", ips); } Map votes = (Map)application.getAttribute("votes"); if(votes==null) { votes = new HashMap(); application.setAttribute("votes", votes); votes.put("red", new Integer(0)); votes.put("green", new Integer(0)); votes.put("blue", new Integer(0)); } String vote = request.getParameter("stemme"); if(vote!=null) { String ip = request.getRemoteAddr(); if(ips.contains(ip)) { %> <%=ip%> har allerede stemt engang ! <% } else { Integer oldcount = (Integer)votes.get(vote); Integer newcount = new Integer(oldcount.intValue() + 1); votes.put(vote, newcount); ips.add(ip); } } %> <h3>Hvad er din yndlings farve</h3> <form method="POST" action="vote1.jsp"> <input type="radio" name="stemme" value="red">Rød <br> <input type="radio" name="stemme" value="green">Grøn <br> <input type="radio" name="stemme" value="blue">Blå <br> <input type="submit" value="Stem"> </form> <h3>Afstemnings resultat</h3> <table border> <% Iterator it = votes.keySet().iterator(); while(it.hasNext()) { String color = (String)it.next(); Integer count = (Integer)votes.get(color); %> <tr> <td><%=color%></td><td><%=count%></td> </tr> <% } %> </table> </body> </html>
27. april 2004 - 21:29
#10
vote2.jsp: <%@ page language="java" import="java.util.*" %> <html> <head><title>Stem</title></head> <body> <jsp:useBean id="ips" class="java.util.ArrayList" scope="application"/> <jsp:useBean id="votes" class="java.util.HashMap" scope="application"/> <% String vote = request.getParameter("stemme"); if(vote!=null) { String ip = request.getRemoteAddr(); if(ips.contains(ip)) { %> <%=ip%> har allerede stemt engang ! <% } else { Integer oldcount = (Integer)votes.get(vote); if(oldcount==null) { oldcount = new Integer(0); } Integer newcount = new Integer(oldcount.intValue() + 1); votes.put(vote, newcount); ips.add(ip); } } %> <h3>Hvad er din yndlings farve</h3> <form method="POST" action="vote2.jsp"> <input type="radio" name="stemme" value="red">Rød <br> <input type="radio" name="stemme" value="green">Grøn <br> <input type="radio" name="stemme" value="blue">Blå <br> <input type="submit" value="Stem"> </form> <h3>Afstemnings resultat</h3> <table border> <% Iterator it = votes.keySet().iterator(); while(it.hasNext()) { String color = (String)it.next(); Integer count = (Integer)votes.get(color); %> <tr> <td><%=color%></td><td><%=count%></td> </tr> <% } %> </table> </body> </html>
27. april 2004 - 21:30
#11
Jeg tror at det kunne gøres endnu pænere. Men både ip liste og afstemnings resultat forsvinder ved genstart af server, så måske skal du bruge en database.
27. april 2004 - 21:30
#12
Og et svar
27. april 2004 - 21:33
#13
Det er mest for at opnå en bedre forståelse for hvad man kan bruge sessions til :-) Tak for hjælpen
27. april 2004 - 21:33
#14
27. april 2004 - 21:35
#15
En af pointerne er at i dette tilfælde skal du bruge application og ikke session scope.
27. april 2004 - 21:36
#16
okay, jeg må kigge noget mere på det :-)
29. april 2004 - 12:13
#17
Der skal nok iøvrigt sættes nogle synchronized ind på den ArrayList og HashMap for at undgå samtidigheds problemer ...
Kurser inden for grundlæggende programmering