Avatar billede t_mons Nybegynder
03. marts 2004 - 08:59 Der er 9 kommentarer og
1 løsning

kontrollere request fra samme bruger på server side

jeg ønsker at man ikke kan trykke på en knap et vilkårlig antal gange...

Mit problem er, at når der trykkes på en knap, bliver der lavet nogle database forespørgelser... min applikation bliver forvirret, hvis jeg trykker løs på samme knap....

applikationen skal stadigvæk laver sine forespørgelser...

kontrollere request fra samme bruger på server side (kun et request ad gangen fra samme bruger)


mvh
T_mons
Avatar billede t_mons Nybegynder
03. marts 2004 - 09:00 #1
Og undskyld arne_v, så ikke at du havde svaret på mit spørgsmål, hvor jeg fik af vide at jeg skulle oprette det i javascript... :o)
Avatar billede arne_v Ekspert
03. marts 2004 - 09:12 #2
Det er et pattern i "J2EE patterns" bogen.

Jeg kan ikke huske hvordan de løser det.

Men det kan løses ved at sætte et flag i sessionen når man starter på
en request og rejecte hvis det allerede er sat og cleare det når
man er færdig.

Husk synchronized for at undgå race conditions.
Avatar billede arne_v Ekspert
03. marts 2004 - 09:14 #3
Du kan også overveje ikke at cleare det ved return men at bruge et time stamp
og sige at man kan ikke submitte det samme indenfor X sekunder, fordi man
antager af det er et utålmodigheds klik.
Avatar billede arne_v Ekspert
03. marts 2004 - 09:15 #4
Core J2EE Patterns: Best Practices and Design Strategies
Deepak Alur & Dan Malks & John Crupi
Avatar billede t_mons Nybegynder
03. marts 2004 - 13:47 #5
Jeg tror jeg vil benytte mig af timestamp, det vil være perfekt....
Avatar billede arne_v Ekspert
03. marts 2004 - 14:13 #6
Skriv hvis du vil have noget uddybet
Avatar billede t_mons Nybegynder
03. marts 2004 - 15:13 #7
hej arne

du må meget gerne uddybe, hvordan man vil kunne kontrolere det på serversiden... ;o)
gerne med en stump kode, da det giver lidt mere overblik !!!!
Avatar billede arne_v Ekspert
03. marts 2004 - 21:50 #8
Meget simpelt eksempel:

<%
boolean ok;
int t = (int)(System.currentTimeMillis() / 1000);
synchronized(this) {
    Integer nn = (Integer)session.getAttribute("timestamp");
    if(nn == null) {
      ok = true;
    } else {
      int n = nn.intValue();
      if(t < (n + 60)) {
          ok = false;
      } else {
          ok = true;
      }
    }
}
if(ok) {
    session.setAttribute("timestamp", new Integer(t));
%>
Klik <A HREF="<%=request.getRequestURL()%>">her</A> men ikke
hyppigere end med 1 minuts mellemrum.
<%
} else {
%>
Jeg sagde 1 minut !
<%
}
%>
Avatar billede arne_v Ekspert
03. marts 2004 - 21:51 #9
Men måske skulle du også checke den løsning fra bogen ...
Avatar billede t_mons Nybegynder
03. marts 2004 - 22:24 #10
ja - jeg vil kigger lige på løsningen i bogen....   
1000 tak for det simple eksempel...
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