Avatar billede cow-tilter Nybegynder
22. april 2003 - 16:10 Der er 28 kommentarer og
1 løsning

Unik nummer til hver besøgende. Sessionid??

Jeg er begyndt at kigge lidt på det her JSP, og er nu rendt ind i et problem. Jeg vil lave en side med en indkøbskurv, så når en besøgende vælger et produkt bliver varen smidt over i kurven. For at siden skal kunne huske hvad den enkelte besøgende har lagt i kurven, skal den besøgende udstyres med et unikt nummer.

Problemet består i at få tildelt brugeren dette nummer. Jeg har forestillet mig at hente dette unikke nummer fra en tabel (A), så det nummer der er i tabel A altid svarer til den seneste besøgendes nummer. Siden skal altså huske denne sessionid. Jeg bruger MySQL som server for tabellerne.
Hvis der er uklarheder så gør endelig opmærksom på dem.
Avatar billede arne_v Ekspert
22. april 2003 - 16:16 #1
Det er der flere mulige løsninger på.

Efter min mening er den bedste at lave en UID generator baseret
på Scott Ambler high low approach.

Et alternativ, hvis du persisterer kurven med det samme er at bruge
noget autonumber (der er for de fleste databas emulighed for at fiske
det af databasen genererede nummer op).

Alternativt kan du selv bikse noget sammen f.eks. af serverens
ip nummer og session objektets adresse.
Avatar billede simonvalter Praktikant
22. april 2003 - 16:17 #2
noget ala det example der følger med tomcat .. ?
http://www.gbit.dk/examples/jsp/index.html
kig på Sessions example
Avatar billede arne_v Ekspert
22. april 2003 - 16:21 #3
Normalt vil man hvis man ikke persisterer bare gemme kurven
i session objektet. Så har man slet ikke behov for den unikke ID.
Men jeg formoder at du har grunde til at ville gøre det som du
gør.
Avatar billede cow-tilter Nybegynder
22. april 2003 - 16:59 #4
<<arne v>>
Nu skal det siges at jeg er helt grøn på deher område, og jeg må nok sige at der kom flere ord jeg ikke lige fik fat i... Du snakker om at der ikke er behov for unikke ID. Hvad vil det sige at "persistere" kurven, og hvad indebærer den anden løsning du omtaler?

Jeg er ikke helt tilfreds med systemet i det eksempel fra tomcat, men grundidéen med en kurv er god nok...
Avatar billede arne_v Ekspert
22. april 2003 - 17:09 #5
Det er en indbygget feature i JSP/servlets at serveren kan holde styr
på sessions d.v.s. det skal du ikke bekymre dig om.

Som en del af den service har JSP sider og servlets adgang til et
session objekt som er det samme objekt i hele sessionen d.v.s. hvis
man på en side gemmer noget i det så kan man hente det frem på
en anden side bare de er en del af samme session.

Hvis det er tilstrækkeligt så behøver du ikke spekulere på
unik ID.
Avatar billede arne_v Ekspert
22. april 2003 - 17:16 #6
"persistere" = "gemme i databasen"

:-)
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:17 #7
Så kan man altså også smide en vare over i kurven, vende tilbage til produkt listen, vælge en ny vare, og når man så kigger i kurven ligger de der begge to? Det lyder nok noget nemmere.
Avatar billede simonvalter Praktikant
22. april 2003 - 17:19 #8
ja .. det kunne du også på det eksempel ..

og du kan også sætte den til at hente session id fra cookie hvis du skulle have lyst til det
Avatar billede arne_v Ekspert
22. april 2003 - 17:26 #9
Det er det man normalt gør.

Man skal normalt have nogle lidt specielle krav for at det er
nødvendigt selv at generere UID'er (unikke ID'er). Men det hænder
at man har brug for det.
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:27 #10
Altså hvis jeg er så heldig at jeg får en bestilling, så vil jeg kunne hive en session id ud, som jeg kan assosiere med de bestilte varer og kundeinfo, så jeg kan se hvad kunden købte? Det bliver bedre og bedre det her.

Det jeg ikke kunne lide i det eksempel du sendte (loadet) var at 1. kurven var på samme side som varerne (det kan selvf. ændres), 2 at man skulle vælge varen igen for at slette den. Jeg har bygget det op således at produktlisten hentes fra en tabel (B), og altså ikke i en rullemenu. Jeg ved ikke om eksemplet stadig kan bruges til mit projekt.
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:29 #11
Jeg skal bare kunne se kundeinfo og bestilte varer ud fra session id'en.
Avatar billede simonvalter Praktikant
22. april 2003 - 17:31 #12
ja det kan ændres ... det var bare for at vise dig principet i det ..
du kan se mere under http://www.gbit.dk/examples/servlets/index.html
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:35 #13
Hmm, det ser rigtg godt ud. Er det var at benytte den metode i har fremstillet?
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:43 #14
Når jeg nu prøver at få siden frem ved at gemme den som *.jsp, kan jeg ikke få den frem. Nu er jeg godt klar over at det nok er optimistisk at tro at den ville virke, men hvordan gør jeg så?
Avatar billede arne_v Ekspert
22. april 2003 - 17:45 #15
Jeg vil fraråde at bruge session ID til at gemme i databasen.

Der er ingen garanti for at den vil være tilstrækkelig unik
til det.

(i praksis er jeg overbevist om den vil være det)
Avatar billede cow-tilter Nybegynder
22. april 2003 - 17:58 #16
Ok, jeg skal bruge det til et skoleprojekt, så hvis jeg kan få den virke vil det være fint... Det er ikke fordi den bliver presset så hårdt...
Avatar billede cow-tilter Nybegynder
22. april 2003 - 18:09 #17
Men hvordan bruger jeg den? Hvordan kan jeg få disse resultater frem på min egen side? Du lyder skeptisk arne v, kan du forklare nærmere hvordan du mener at man bør gøre?
Avatar billede arne_v Ekspert
22. april 2003 - 18:38 #18
Det er helt OK at gemme kurven i sessionen og bruge den. Det er faktisk
anbefalelsesværdigt.

Det skal virke.

Men man bør ikke bruge session ID'en til at gemme i databasen.
Avatar billede arne_v Ekspert
22. april 2003 - 18:55 #19
Du skal jo stort set ikke lave noget for få det til at virke med sessions.

I servlets bruger du:

Kurv kurv = request.getSession().getAttribute("kurv")
request.getSession().putAttribute("kurv", kurv);

I JSP bruger du:

Kurv kurv = session.getAttribute("kurv")
session.putAttribute("kurv", kurv);

eller:

<jsp:useBean id="kurv" scope="session" class="Kurv" />
Avatar billede cow-tilter Nybegynder
22. april 2003 - 19:13 #20
Skal bruge både JSP og servlets? Hvor skal jeg i såfald sætte dem ind henne?
Avatar billede arne_v Ekspert
22. april 2003 - 19:26 #21
Der skal sættes noget ind i alle de servlets og JSP sider, hvor du skal
bruge kurven.
Avatar billede cow-tilter Nybegynder
22. april 2003 - 19:34 #22
Ken jeg nøjes med kun at bruge JSP?
Avatar billede arne_v Ekspert
22. april 2003 - 19:36 #23
Nu kender jeg ikke din applikation.

Men det vil jeg tro at du kan.
Avatar billede cow-tilter Nybegynder
22. april 2003 - 19:42 #24
Jeg bliver lige nødt til at vende tilbage til det, skal lige rode lidt med det :)
Avatar billede arne_v Ekspert
22. april 2003 - 19:44 #25
Det er den eneste måde at lære det på.
Avatar billede cow-tilter Nybegynder
23. april 2003 - 19:47 #26
Når jeg jeg indsætter min <% HttpSession session = request.getSession(true); %>
får jeg at vide at: session is already defined in _jspService(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

Det er selvfølgelig fint nok at den er diffineret, men det skulle den da ikke være. Er det noget jeg kan ændre på?
Avatar billede arne_v Ekspert
23. april 2003 - 19:51 #27
Du skal ikke definere/hente session for JSP sider.

Der er der bare og kan bruges umiddelbart.
Avatar billede cow-tilter Nybegynder
23. april 2003 - 19:52 #28
Ok. Jeg roder lige videre
Avatar billede cow-tilter Nybegynder
23. april 2003 - 21:25 #29
Nå så virker det... Tak for hjælpen. Jeg går ud fra at loadet ikke ønsker nogen point, men også tak til ham.

60 points til dig arne v

<<Loadet>> hvis det er en forglemmelse at du ikke har smidt noget svar, så kan du lige skrive det...
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