Avatar billede mik28 Seniormester
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);
Avatar billede arne_v Ekspert
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);
}
Avatar billede mik28 Seniormester
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>
Avatar billede mik28 Seniormester
27. april 2004 - 19:14 #3
Avatar billede mik28 Seniormester
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>
Avatar billede mik28 Seniormester
27. april 2004 - 19:30 #5
Jeg er heller ikke med på hvorfor det først virker anden gang at man trykker på stem
Avatar billede mik28 Seniormester
27. april 2004 - 20:39 #6
Man er vel ret beset nød til at bruge en database hvis man skal styrer det ordenligt :-)
Avatar billede arne_v Ekspert
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.
Avatar billede mik28 Seniormester
27. april 2004 - 20:42 #8
Det ville være fedt :-)
Avatar billede arne_v Ekspert
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>
Avatar billede arne_v Ekspert
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>
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
27. april 2004 - 21:30 #12
Og et svar
Avatar billede mik28 Seniormester
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
Avatar billede mik28 Seniormester
27. april 2004 - 21:33 #14
Avatar billede arne_v Ekspert
27. april 2004 - 21:35 #15
En af pointerne er at i dette tilfælde skal du bruge application og ikke session scope.
Avatar billede mik28 Seniormester
27. april 2004 - 21:36 #16
okay, jeg må kigge noget mere på det :-)
Avatar billede arne_v Ekspert
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 ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester